Pergunta

Considere os padrões de arquitetura de aplicativos corporativos de Martin Fowler e o padrão do Front Controller: http://martinfowler.com/eaaCatalog/frontController.htmlAparentemente, ele usa o padrão singleton.Bem, eu tenho um pacote de classes em aplicativos php que funcionam juntas (como o Controller Package do Zend) e há uma classe que torna todas elas utilizáveis ​​e como se assemelha muito aos conceitos do Front Controller, chamei-a de PackageName_Front.Mas não deveria ser uma classe singleton (em oposição ao Front Controller), então ainda deixo que ela tenha o nome Front?Se não, como devo nomeá-lo?Como é um pacote bastante grande, só preciso que ele siga as convenções tanto quanto possível (não de uma forma dogmática!) para que seja legível para outros desenvolvedores.

Mais informações:Não é nada relacionado a controladores.É apenas um objeto que funciona como Zend_Form (que consolida o uso de todos os outros objetos como Zend_Form_Element_X e Zend_Validate em um objeto). Mas não posso simplesmente chamá-lo de PackageName.Tem que ser PackageName_Something, e eu simplesmente não sei o que Something deveria ser.Talvez "Manipulador"?...Eu só quero ter certeza de que quando alguém ler seu nome, não ficará confuso sobre sua função em todo o pacote :)

Foi útil?

Solução

Aparentemente, é [Controlador Frontal] usa o padrão singleton.

FrontController não precisa ser implementado como Singleton.O livro não sugere nada parecido com isso.O exemplo do livro usa um Servlet para o Handler.

Só porque uma classe só será necessária uma vez em um aplicativo não justifica sua implementação como Singleton.Está faltando o propósito do Singleton que é impor uma classe só pode ter uma instância e fornecer acesso global a ele.Se você precisar de uma instância específica apenas uma vez, considere Basta criar um em vez de.

Muitas pessoas hoje em dia (incluindo Erich Gamma, famoso pelo GoF) veem o Singleton como um cheiro de código e desencorajam seu uso.Em uma arquitetura sem compartilhamento, o Singleton só pode restringir instâncias dentro da solicitação atual, portanto o uso em PHP é limitado.O acesso global a um objeto pode ser alcançado sem o padrão Singleton, seja por meio da (má) palavra-chave global ou de métodos estáticos.O acesso global sempre cria acoplamento desnecessário.A melhor maneira seria usar Injeção de Dependência, que tem o benefício adicional de fornecer menos acoplamento e, portanto, melhor capacidade de manutenção.

então ainda deixo que tenha o nome Front?Se não, como devo nomeá-lo?Como é um pacote bastante grande, só preciso que ele siga as convenções tanto quanto possível (não de forma dogmática!)

Não existe tal convenção sobre como nomear classes Frente aulas que eu saiba.O que você descreve pode ser um Fachada ou um Porta de entrada no entanto.Além disso, você tem certeza de que não pode nomear a classe após PackageName?Afinal, o Zend_Form pacote tem um Zend_Form aula também.

Outras dicas

Apenas do ponto de vista puramente de design, parece que você está usando PackageName_Front como uma fachada quando diz:

há uma classe que os torna todos utilizáveis

A implementação do padrão por Fowler diz:

O controlador frontal consolida todo o manuseio de solicitações canalizando solicitações por meio de um único objeto de manipulador

Isso insinua que um Singleton pode ser usado para implementar a classe Front Controller, mas certamente não o restringe a usá-lo.Ele não menciona isso explicitamente.

Não acho que seja importante ser ou não um Singleton.Apenas certifique-se de que seja o único canal para solicitações e você terá usado o padrão com sucesso.:)

A ideia por trás do padrão singleton é garantir que haja apenas uma instância de um objeto que deveria existir apenas em uma única instância.O controlador frontal se enquadra muito bem nesta categoria, então talvez seja sensato fazê-lo seguir um padrão singleton.

Se, no entanto, seu código sempre garantir que chamará o construtor apenas uma vez, haverá espaço para seu objeto padrão não singleton.

Meus 2 centavos aqui, já que não sou nenhum autor de livro ou algo assim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top