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!

¿Fue útil?

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 () .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top