[Python-es] pregunta sobre OOP: ?donde poner un metodo list()?

Alberto Valverde alberto en toscat.net
Mar Mayo 9 18:19:49 EDT 2017


2017-05-09 22:49 GMT+02:00 Jose Caballero <jcaballero.hep en gmail.com>:

> Pirmero, perdon por la ausencia de tildes.


>
>
> Imaginemos un caso cualquiera donde el programa tiene que crear,
> modificar, eliminar y listar "cosas", en algun tipo de registro (una
> BBDD, ficheros, servicio web, etc.)
> Las podemos llamar Item.
>
> Imagino que necesitaria una clase Item con los metodos para crear,
> eliminar y modificar:
>
> class Item:
>     def __init__(self):
>         ...
>
>     def create(self):
>         ...
>
>     def remove(self):
>         ...
>
>     def update(self, data):
>         ...
>
>
> Mi duda es donde habria que tener un metodo list().
> ?En una clase diferente, tipo ItemsManager o algo parecido?
>

Creo que buscas algo con pinta de contenedor, Fowler lo llama el
"repository pattern" [1]. Éste se encargaría de añadir, eliminar, listar y
probablemente buscar items. No le metas esa responsabilidad a los items en
si porque qué necesidad tienen éstos de saber donde los vas a guardar? Tal
vez incluso necesites guardarlos en sitios distintos en distintos momentos
(bdd, caché, ...)

[1] https://martinfowler.com/eaaCatalog/repository.html


> Asumiendo que la respuesta es que si...
> ?Que pasa si tengo 2 o mas objetos que gestionar: Item1, Item2, ..., ItemN?
>

Los metes en distintos contenedores (el mismo parametrizado por tipo de
ítem)


> ?Necesitaria sendas clases Item*Manager?
>

Yo lo haría así


> ?O todo en una sola, como sigue?
>
> class ItemsManager:
>     def listitems1(self):
>         ...
>
>     def listitems2(self):
>         ...
>
>     def listitemsN(self):
>         ...
>
?Que me recomiendan?
> Cualquier sugerencia de alguien con experiencia en OOP sera mas que
> bienvenida.
> Y links con ejemplos de buenas practicas para este tipo de problemas, mas
> aun :)
>
> Gracias,
> Jose
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20170510/1fe29592/attachment.html>


Más información sobre la lista de distribución Python-es