Question

Je fais une application java.

Ce sont mes fichiers jusqu'à présent:

Interface personne.

a une méthode setName (String aName)

PersonImpl

Implémentation de l'interface personne.

Interface PersonFactory

a un createPerson ()

PersonFactoryImpl

Implémentation de l'interface PersonFactory.

Le problème, c’est que j’ai voulu ajouter une méthode getAll () qui renvoie une collection de personnes et je ne sais pas trop où la placer.

Je pensais l'ajouter en tant que méthode statique à PersonImpl ou à PersonFactoryImpl, mais je ne suis pas sûr.

Quel est le meilleur moyen?

Merci d'avoir lu!

Était-ce utile?

La solution

Si une autre implémentation de PersonFactory est fournie, doit-il également fournir un #getAll? Si tel est le cas, il appartient à l'interface ... et il ne peut pas s'agir d'une méthode statique en Java.

Cela étant, est-ce que cela dépend de votre PersonFactory ou devrait-il également y avoir une abstraction pour votre mécanisme de stockage? Si tel est le cas, une interface PersonRepository dont les implémentations acceptent une PersonFactory et fournit une maison naturelle pour les fonctionnalités de type getAll semble plus appropriée. Sinon, en tant que membre concret de PersonFactory, cela pourrait suffire ...

Autres conseils

La manière logique serait de l'ajouter en tant que méthode statique à PersonFactory . C’est la classe qui génère vos objets Person et si elle conserve des références à tous les objets générés, elle devrait pouvoir répondre à votre API getAll () .

Évidemment, il n'est pas raisonnable que chaque objet Person soit conscient de l'existence d'autres objets similaires, cette méthode n'y appartient donc pas.

EDIT: étant donné qu'ils résident dans une base de données, il peut être judicieux de découpler PersonFactory (la tâche qui consiste à créer Personne objets), depuis un PersonRepository qui accédera réellement à la base de données (ou quelle que soit sa persistance) et renverra des objets Person .

Il me semblerait étrange que la même classe soit chargée à la fois de créer des objets et de les récupérer à partir d'une base de données. Cela dit, si votre application requiert ce couplage étroit, cela pourrait être acceptable.

L’usine est responsable de la gestion des instances de personnes, c’est donc le bon endroit pour la placer. De plus, il devrait être non statique, tout comme createPerson () .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top