Dónde colocar un método getAll () cuando se tiene una Fábrica
Pregunta
Estoy haciendo una aplicación Java.
Estos son mis archivos hasta ahora:
Interfaz de persona.
tiene un método setName (String aName)
PersonImpl
Implementación de la interfaz de persona.
Interfaz PersonFactory
tiene un createPerson ()
PersonFactoryImpl
Implementación de la interfaz PersonFactory.
La cuestión es que estaba dispuesto a agregar un método getAll () que devuelve una Colección de personas y no estoy seguro de dónde colocarlo.
Estaba pensando en agregarlo como un método estático a PersonImpl o PersonFactoryImpl, pero no estoy seguro.
¿Cuál es la mejor manera?
¡Gracias por leer!
Solución
Si se proporciona otra implementación de PersonFactory, ¿también debería proporcionar un #getAll? Si es así, pertenece a la interfaz ... y no puede ser un método estático en Java.
Dado eso, ¿es una función de su PersonFactory o debería haber una abstracción para su mecanismo de almacenamiento también? Si es así, una interfaz PersonRepository cuyas implementaciones aceptan un PersonFactory y proporciona un hogar natural para la funcionalidad getAll-type parece más apropiada. De lo contrario, como miembro de la PersonFactory concreta podría ser lo suficientemente apropiado ...
Otros consejos
La forma lógica sería agregarlo como método estático al PersonFactory
. Esa es la clase que genera sus objetos Person
, y si mantiene referencias a todos los objetos generados, debería poder responder a su API getAll ()
.
Obviamente, no es razonable que cada objeto Persona
sea consciente de otros objetos similares, por lo tanto, este método no pertenece allí.
EDITAR: Dado que residen en una base de datos, puede ser conveniente desacoplar el PersonFactory
(cuyo trabajo es crear Person
objetos), desde un PersonRepository
que realmente accederá a la base de datos (o cualquier persistencia que tenga) y devolverá los objetos Person
.
Me parecería extraño que la misma clase sea responsable tanto de crear objetos como de recuperarlos de una base de datos. Dicho esto, si su aplicación exige este acoplamiento estrecho, podría ser aceptable.
La fábrica es responsable de administrar las instancias de Personas, por lo que es el lugar correcto para colocarlo. Además, debe ser no estático como lo es createPerson ()
.