Quando uma classe de cola ou gerenciamento está fazendo muito?

10

Sou propenso a criar classes centralizadas que gerenciam as outras classes em meus projetos. Ele não armazena tudo sozinho, mas a maioria das solicitações de dados é direcionada ao "gerente" primeiro. Enquanto procurava uma resposta para essa pergunta , notei o termo "Objeto de Deus". A Wikipedia a lista como um antipadrão, compreensivelmente.

Onde está a linha entre uma classe de cola legítima, ou módulo, que passa dados e mensagens de um lugar para outro, e uma classe que está fazendo muito?

jprete
fonte

Respostas:

15

Muitas pessoas dizem coisas como "uma classe nunca deve ser maior que sua cabeça".

No entanto, acabei de participar de uma discussão com alguns grandes programadores de classe mundial sobre esse assunto. Eu conversei com um dos caras da Naked Objects. Até onde sabemos, às vezes isso acontece, e não há muita maneira de contornar isso.

Normalmente, porém, a única classe na qual isso acontece é um objeto de domínio que representa o elemento fundamental do seu domínio - uma conta para serviços bancários, uma venda para varejo etc. etc. Se você perceber que isso acontece com outras classes também, provavelmente deseja considerar a responsabilidade dessa classe. Aqui estão minhas dicas:

  • Se for chamado "Gerente", "Auxiliar" ou "Serviço", é provável que seja muito grande. Depois de descobrir qual deve ser a responsabilidade de uma classe, será mais fácil delegar as outras responsabilidades.
  • Se é chamado de "Controller", deve ser responsável por controlar a interação entre várias outras classes ... e nada mais.
  • Se ele está passando dados e mensagens entre diferentes nós físicos, em seguida, seja ele deve lidar com a conversão de uma mensagem específica a uma forma seriada, ou ele lida com o mecanismo de transferência. Por exemplo, você pode ter uma classe que converte uma transação bancária em XML e outra classe que envia esse XML por HTTP.
  • Se estiver passando eventos entre módulos diferentes em um aplicativo, deve ser responsável por informar os ouvintes quando um evento é gerado e nada mais.

Como regra geral, se for muito grande, verifique se você pode delegar responsabilidades para outra classe e, se não puder, provavelmente está tudo bem.

Lunivore
fonte
Boa resposta com diretrizes concretas úteis. Costumo criar classes como essa para objetos de domínio em que todos, ou quase todos, os dados representam algum aspecto do domínio e quero tratá-los como uma unidade. Então, eu tendem a delegar as responsabilidades reais para as classes que são realmente realmente instanciadas dentro da grande classe. Portanto, estou bem próximo da linha, e provavelmente devo me inclinar para diminuir as classes individuais ao escrevê-las.
jprete