Classe João e Classe Maria
Às margens de uma floresta, um lenhador muito pobre vive com seus filhos e esposa – a madrasta de seus filhos. Em tempos de dificuldade, a falta de alimento os leva a uma solução um tanto quanto drástica: abandonar os filhos na floresta por não ter como alimentá-los.
Apesar do apelo dramático, este é o verdadeiro início do conto de fadas “João e Maria” (ou, Hãnsel und Gretel) dos Irmãos Grimm, conhecido clássico infantil.
Na continuação do conto, João e Maria, conhecendo o triste objetivo de sua madrasta, decidem marcar o caminho para conseguir voltar. Da primeira vez com sucesso, ao usarem pedras brancas. Na segunda, com pão.
E isso me lembra de um clássico quando se fala em AOP: Log.
O principal exemplo em textos de AOP utiliza este clássico no intuito de auxiliar o entendimento do novo conceito.
Talvez porque o processo de Log em uma aplicação é amplamente conhecido como necessário, mas os meios e real utilização dele se aproximam das idéias de João e Maria. Alguns logam com pedras, outros com pão. Existem os que logam. E os que não.
João e Maria, como classes, têm outras responsabilidades. São crianças. Querem brincar e se divertir. Não deveriam se preocupar em marcar o caminho percorrido.
Mas muitas vezes surgem os temidos “bruxos do Processo e do Padrão”, terror dos implementadores. E com sua voz de trovão estabelecem: Todo método deve logar o início e fim de seu processamento. E as crianças tremem.
Nas primeiras semanas, os implementadores todos animados procuram as pedras brancas mais polidas para utilizar nos Logs. Claras identificações de entrada e saída de cada método. Até que o tempo começa a ficar escasso. Assim como as pedras. E surge o pão. Pedaços de Log jogados aqui e ali, que acabam sendo engolidos por outros códigos. Implementadores esfomeados que comem o pão e esquecem do Log. E João e Maria ficam perdidos na floresta.
E então temos a AOP, como uma fada-madrinha, para resolver o problema de João e Maria e acalmar os bruxos do Processo e do Padrão. Um aspecto de Log, que assume a responsabilidade de marcar o caminho e logar o início e fim de processamento de cada método. Um aspecto que pode ser colocado ou retirado de todo o sistema como um passe de mágica. Sem dependências com João e Maria, sem dependência com implementadores.
Este é um clássico da AOP que demonstra bem como uma responsabilidade – a de determinada regra de Log – pode ser retirada do código interno das classes. E transferida a um aspecto específico, de responsabilidade bem definida.
Ganha a classe, ficando mais objetiva e limpa. Ganha o implementador, focando apenas no desenvolvimento da funcionalidade da classe. Ganha o sistema, com um processo de Log padronizado e garantido, e ainda de fácil alteração. E como em todos os clássicos contos de fadas: vivem felizes para sempre.