Um software é composto de códigos que se comunicam.
Comunicar é trocar mensagens.
Logo, um software é um conjunto de códigos que trocam mensagens.
Parece razoável? Espero que sim, mas se é razoável por que diabos os programadores não se preocupam com a mensagem e focam todo o seu trabalho no código?
Elaborando um pouco mais:
O objetivo de um código é resolver o problema X.
Não deve existir Dois códigos resolvendo o mesmo problema X.
Logo, os códigos não compartilham o mesmo objetivo.
Também parece razoável. Para que ter dois códigos dentro do mesmo software resolvendo o mesmo problema?Os céticos citariam o capitão Nascimento “estratégia” a que eu responderia “o conteúdo de estratégia, do inglês strategy, do grego στρατηγική…”.
Então chegamos a:
Um software é uma coleção de códigos conectados que decompõem um problema em problemas menores.
Códigos conectados precisam comunicar seus resultados para compor a solução do problema objetivo do software.
Logo, códigos conectados compartilham a necessidade de trocar mensagens para se comunicar.
Então eu me pergunto, se parece óbvio, por que a mensagem normalmente é a coisa mais mal ajambrada na maioria dos software? Parecendo o resultado de um remendo após o outro. Mensagens gigantes, de formato instável, ideal para um código mas não para outro.
E por que os programadores ignoram o efeito que essa pratica tem sobre os algoritmos, que se tornam um emaranhado de if’s elses, sem condição alguma de serem mantidos?
Existem os códigos, a mensagem e o mensageiro.
O código de domínio de cada problema(esses códigos normalmente tem sua própria estrutura de dados interna); a estrutura de dados que navega pelos códigos(a mensagem) e a Service Layer que conecta a todos por que sabe formatar a mensagem para que cada código receba um input que compreenda e que o output possa ser compreendido e seja refletido na mensagem principal que contem a solução do problema a que o software se propõem.