modelagem baseada responsabilidade contra razões de classe para a mudança
-
05-07-2019 - |
Pergunta
Na este texto li
Esteja alerta para um componente que é apenas uma responsabilidade glorificado. UMA componente é suposto uma captura abstração que tem um propósito na sistema. Pode acontecer que o que aparece em um momento como uma significativa componente é realmente apenas uma única responsabilidade à esquerda na sua própria. Este responsabilidade poderia ser atribuída a um componente.
Isso me confunde. Se uma classe deve ter apenas uma razão para a mudança, parece que ele deve ter um responsabilidade. Mas agora parece que eu estou levando isso muito estreito. Pode de alguma forma dar uma explicação de responsabilidade e razão para a mudança no contexto de responsabilidade baseado modelagem? Pode uma classe tem mais de duas responsabilidades e ainda ter uma razão para a mudança (ou o contrário)?
Solução
Leia sobre modelagem Classe-Responsabilidade-Colaboração (ou design)
http://www.agilemodeling.com/artifacts/crcModel.htm
http://alistair.cockburn.us/Using+CRC+cards
http: //users.csc.calpoly. edu / ~ jdalbey / SWE / CaseStudies / ATMSim / CRCmodel.html
http://c2.com/doc/oopsla89/paper.html
Uma classe pode ter várias responsabilidades. Ele sempre representa uma "coisa" single.
O "uma razão para a mudança" regra não se aplica às responsabilidades. Período.
O "uma razão para a mudança" regra deve ser usado da seguinte maneira.
-
Isso não significa que "1". Significa "o mínimo possível".
-
Aplica-se à "interface" ou "abstração subjacente" ou "conceito" para uma classe. A classe deve encapsular alguns conceitos. Quando que as mudanças conceito central, a classe muda.
-
Muitas coisas simples são melhores do que algumas coisas complexas. É mais fácil de recombinar e modificar as coisas simples.
-
Dentro de cada coisa complexa muitas coisas simples que tentam ser livre.
-
É difícil definir "simples", mas "um conceito" está perto. "Uma coisa é mudança" é também um teste útil para a "simplicidade".
-
Finalmente, "uma das razões para a mudança" não significa literalmente "1".
Outras dicas
A forma como eu entendo, o perigo de "glorificar a responsabilidade de um componente" significa que você precisa ter cuidado para não traduzem responsabilidades para os componentes do sistema diretamente.
Por exemplo, em um sistema de e-mail, o usuário pode aproximar o sistema com o objetivo de iniciar uma mensagem para um destinatário. É responsabilidade do sistema para tornar isso possível.
O usuário também pode aproximar o sistema para ler e responder a um e-mail. É responsabilidade do sistema para tornar isso possível, também.
Mas isso significa que não há necessidade de ser dois componentes "iniciar novo e-mail" e "responder a e-mail" no sistema? Não. Um componente geral "e-mail compor" seria capaz de lidar com ambos os requisitos.
Portanto, neste caso, o componente "email compor" é responsável pelos objetivos do usuário "iniciar novo e-mail" e "responder e-mails". Mas ele só precisaria mudar se as suas mudanças conceito de núcleo ( "como e-mails são compostas").
Olhe novamente de perto a seguinte frase por Cockburn: "Um componente é suposto para capturar uma abstração que tem um propósito no sistema". A propósito no sistema (razão para mudança) não é o mesmo que o propósito de satisfazer uma meta de usuário (responsabilidade).
Para fazer a longa história curta: Como o meu entendimento, um componente idealmente tem um conceito central. Pode ter várias responsabilidades. Mas a meu ver, a única responsabilidade não pode ser atribuída a mais de um componente.