ti-enxame.com

Quando ligo para o meu controlador de classe, gerente ou serviço?

Talvez seja óbvio para você. Eu sou novo em Java (trabalho de meio ano) e tive uma discussão com meus colegas. Tenho problemas em nomear minhas classes de acordo com as responsabilidades deles. Por isso, minhas classes ganham responsabilidades que nunca deveriam ter.

Pode me ajudar?

BTW: Estou trabalhando atual em um projeto onde tenho que usar uma camada de persistência de classes de serviço. Dividi meus pacotes por modelo, serviço e persistência.

45
MartinL

Existem certos padrões e diretrizes por trás desse termo, que é onde eu geralmente o baseio:

O controlador é baseado no padrão modelo-vista-controlador e deve ser usado explicitamente para as classes que implementam a funcionalidade do controlador com base neste padrão de design. Por exemplo. se você estiver usando o Spring MVC e for de uma das classes Controller.

O serviço é um pouco menos específico, mas eu recomendo basear a implementação no padrão Camada de serviço de "Patterns da arquitetura de aplicativos corporativos ". Basicamente, onde um controlador é mais específico da plataforma (por exemplo, transporte via HTTP e renderização de hipertexto, geralmente HTML para controladores baseados na Web), um serviço não precisa saber sobre quem o está usando e como. Você está apenas fornecendo uma interface uniforme que pode ser usada alternadamente, por exemplo. um controlador da web.

Gerentes bem ... gerenciam coisas. Conexões, contexto de aplicação, sessões; geralmente como um local central onde os componentes de todo o aplicativo podem conversar.

51
Daff

Para acrescentar às boas respostas já dadas, se você achar difícil encontrar um nome adequado para suas aulas, talvez deva investigar se suas aulas têm mais de uma responsabilidade. Se for esse o caso, você definitivamente deve refatorar seu código para isolar responsabilidades em classes separadas.

14
Laf

Para convenção de nomes, leia o funcionário convenção .

Gerente - Como o nome sugere que gerencia coisas no seu código, como EntityManager, ele gerencia Entidades, TransactionManager - Gerencia transações. Assim, você pode ter algo chamado SecurityManager, que gerencia qual Algo usar para criptografia e.t.c

Controlador - Novamente, o nome fala muito, controla como o que precisa ser feito ou como as coisas devem ser feitas. Por ex. ActionController - cuida do que fazer ao receber o evento de ação do usuário

Serviço - considere algo como postalService, uma tarefa executada por alguém em geral, você pode usá-lo.

O código de empacotamento precisa de muita reflexão; o empacotamento do aplicativo deve sempre estar alinhado ao modelo de negócios ao qual ele atende.

Juntamente com o modelo de negócios, você precisa pensar se o recurso está no coração do aplicativo, para movê-lo para o núcleo, digamos que, se o recurso for para conversar com outro aplicativo, você gostaria de movê-lo para integração e assim por diante .

11
mprabhat

Não sei se nomeei um gerente de classe, então deixarei de fora.

Para mim controlador é algo que controla ou decide para onde deve ir (sinal, mensagem, ..).

O serviço é um interface (e a implementação dessa interface) fornece algumas funcionalidades, geralmente na borda do sistema ou subsistema. Oculta os detalhes da implementação o máximo possível.

1
Rostislav Matl