Onde colocar um método getAll () quando se tem um Fábrica
Pergunta
Eu estou fazendo uma aplicação java.
Este são os meus arquivos até agora:
Pessoa Interface.
tem um setName (String aName) Método
PersonImpl
Implementação de Pessoa Interface.
PersonFactory interface
tem um createPerson ()
PersonFactoryImpl
Implementação de PersonFactory Interface.
A coisa é que eu estava disposta a adicionar um método getAll () que retorna uma coleção de pessoas e não estou certo de onde colocá-lo.
Eu estava pensando em adicioná-lo como um método estático para PersonImpl ou para PersonFactoryImpl, mas eu não tenho certeza.
Qual é a melhor maneira?
Obrigado por ler!
Solução
Se outra implementação do PersonFactory é fornecido, deve também precisa fornecer um #getAll? Se assim for, ele pertence na interface ... e então ele não pode ser um método estático em Java.
Tendo em conta que, é uma função do seu PersonFactory ou deve haver uma abstração para o seu mecanismo de armazenamento, bem como? Se assim for, uma interface PersonRepository cujas implementações aceitar um PersonFactory, e fornece uma casa natural para a funcionalidade getAll tipo parece mais apropriado. Se não, então como um membro da PersonFactory concreto poderia ser suficiente apropriado ...
Outras dicas
A maneira lógica seria a de adicioná-lo como um método estático para o PersonFactory
. Essa é a classe que gera seus objetos Person
, e se mantém referências a todos os objetos gerados, ele deve ser capaz de responder a sua getAll()
API.
Obviamente, não é razoável para cada objeto Person
estar ciente de outros objetos semelhantes, portanto, este método não pertence lá.
EDIT: Dado o fato de que eles residem em um banco de dados, pode ser sábio para desacoplar a PersonFactory
(que trabalho é criar objetos Person
), a partir de um PersonRepository
que será realmente acessando o banco de dados (ou qualquer persistência que você tem) e retornando objetos Person
.
Parece estranho para mim que a mesma classe é responsável tanto para a criação de objetos, bem como buscar-los a partir de um banco de dados. Dito isto, se a sua aplicação exige isso tight-acoplamento, pode ser aceitável.
A fábrica é instâncias de gestão responsáveis ??das Pessoas, de modo que é o local correto para colocá-lo. Além disso, deve ser não-estático, assim como createPerson()
é.