segunda-feira, 23 de fevereiro de 2009

One Model to rule them all !

Confesso que ainda que simpatize com Domain Driven Design e procure praticar alguns de seus conceitos, não conclui a leitura da "bíblia" do assunto. Ainda assim julgava ter um entendimento satisfatório, haja vista a leitura parcial da referência e a leitura de infindáveis posts que li nas comunidades de desenvolvimento.
Uma conclusão precipitada que tomei, baseado no meu conhecimento parcial do assunto, foi que um conceito chave desta disciplina era a existência de um modelo de domínio ÚNICO por aplicação, o qual acomodaria as regras de negócio, ou parafraseando o Senhor dos Anéis: "One Model to rule them all" .
Recentemente me deparei com a entrevista de um desenvolvedor/arquiteto de software de nome Greg Young, na Infoq, que me chamou atenção pelo fato deste praticar DDD em comunhão com Imutabilidade, algo que venho confabulando há algum tempo. Porém o que mais me chamou atenção foi o fato dele ter modelos de domínio distintos para escrita e para leitura de dados. Intrigado com essas peculiaridades de design pesquisei mais sobre o assunto e encontrei um blog do referido entrevistado no qual ele desenvolve melhor esses conceitos. A explanação culmina na seguinte afirmação.
















O que é uma pá de cal na minha na minha ingênua conclusão sobre DDD: "One Model to rule them all" .
Juntados os cacos, resta recompor-me e aproveitar este incidente como motivação para dar continuidade a leitura da "bíblia" e para pesquisar sobre "domínio múltiplo". Como produto destas pesquisas espero responder as perguntas do tipo: Seria o design com "domínio multiplo" uma prática comum no mundo DDD? O "domínio múltiplo" é uma condição para se praticar DDD e imutabilidade? Quais os impactos na coesão do sistema? Isso não seria uma extrapolação Chiita dos princípios de design SRP e Command-Query Separation para arquitetura? Certezas poucas e dúvidas muitas!

Um comentário:

Pedro Cavaléro disse...

Eu ainda não consigo enxergar essa idéia sem pensar na antiga idéia de views de BD. Eu vejo essa separação de interesses de leitura e escrita quando ocorre a necessidade de caches, melhorando o throughput do sistema, mas não como parte do design.
Se bem que eu sou totalmente leigo em imutabilidade. Não sei se ela necessita desse tipo de coisa. Com certeza, com essa idéia em mente, os designs não devem ser feitos iguais, com muitos gets e sets como fazemos normalmente.
Precisamos estudar... :)
Abraços!