Uma Metáfora Sistêmica

Metáfora sistêmica, um “quebra galho” arquitetural
Há algum tempo, comentamos em relação a como obter a metáfora sistêmica prescrita pelo XP e deixamos uma questão sobre o quanto ela contribui para a representação da arquitetura. Conforme comentário do Paulo Merson, a metáfora sistêmica, de fato, representa muito pouco da arquitetura, apesar de servir como um esboço inicial.

A experiência
Recentemente tivemos uma experiência com uma metáfora sistêmica que julgamos interessante e gostaríamos de dividi-la.

Em um projeto da área de telecomunicações, estávamos prestes a desenvolver um módulo cuja responsabilidade era verificar se os demais módulos estavam funcionando corretamente e, caso algum estivesse apresentando algum tipo de falhas, alertaria uma ferramenta de monitoração via SNMP. Em outras palavras, o módulo deveria observar a saúde do restante do sistema e comunicar qualquer anormalidade.

Ao usar termos como “saúde” e “batida do coração” (heartbeat é uma tática comum para detecção de falhas), alguns membros da equipe começaram a brincar que o módulo parecia uma clínica médica de diagnósticos. E da brincadeira surgiu a metáfora sistêmica para o módulo: “Clínica Médica”.

A metáfora serviu de diretriz segura para a dupla que iria desenvolver o módulo. Bastou uma sessão de modelagem rápida e coletiva (não passou de meia hora) para que a dupla estivesse pronta para meter a mão na massa. Afinal de contas, mesmo quem nunca ficou internado num hospital, assiste a filmes ou seriados médicos. Todos tinham noção muito precisa de como funcionaria o módulo. Para se ter uma idéia, após o módulo ter sido implementado (em menos de uma semana), estava repleto de classes do tipo DoctorBean, NurseBean, Patient, Heartbeat e por aí vai.

Analisando a experiência:

  • A concretude da metáfora foi muito eficaz para a orientação da dupla. Tínhamos um desenho anterior, mas a modelagem estava um tanto abstrata e não estava contribuindo muito para o entendimento.
  • Os nomes das classes e mensagens ficaram muito mais significativos. Mesmo um programador novato no sistema terá mais facilidades em entender o que faz o DoctorBean (diagnósticos) e que tipo de informação carrega o Heartbeat (sinal de vida). Inclusive, a ausência do heartbeat significa a morte do componente.
  • O trabalho ficou mais divertido! Nurse é bem mais legal que nomes como Template Method (nada contra, mas é meio careta).

Obviamente só a metáfora não teria sido suficiente para se chegar ao código. A dupla refinou bastante o desenho do módulo e o provou com código. E o sistema como um todo dificilmente poderia ser representado somente por uma metáfora. Na verdade, o sistema todo exigiu vários meses de trabalho arquitetural intensivo.

Modelagem inicial e funcionamento
Segue uma noção da modelagem inicial (diagrama de objetos – informal). Peço desculpas por não mostrar a foto original do modelo ágil – eu a perdi.

dnp

Caso esteja curioso sobre o funcionamento:

  • Os monitores dos pacientes emitem os sinais da saúde (heartbeat é um deles).
  • Os componentes enfermeiras coletam dados dos pacientes (agentes implantados nos módulos) e informam ao médico remotamente (o sistema é distribuído).
  • O médico realiza o diagnóstico a partir dos dados coletados e, caso necessário, comunica a morte (ou qualquer possível anormalidade) ao HP OpenView.

Agradecimentos
Gostaria de agradecer à Luíza D. e ao Diego S. pelo trabalho inspirador. E claro ao Mr. K., um dos arquitetos do sistema. Não consigo imaginar como o desenho poderia ter ficado melhor.

Algumas referências:

Extreme Programming Explained (segunda edição) – referência clássica do XP

Made to Stick: Why Some Ideas Survive and Others Die – um excelente livro que aborda aspectos das idéias bem sucedidas, como concretude e simplicidade.

1 comment to Uma Metáfora Sistêmica

  • Mateus Bicalho

    Muito legal e bastante inspirador. Não foram poucas as vezes em que me deparei com cenários, tipicamente de infra-estrutura, para os quais não conseguia dar nome aos bois. Essa abordagem além de muito simples é bastante intuitiva.
    Parabéns

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>