Terminei essa semana de ler o livro do Jimmy Nilson "Applying Domain-Driven Design and Patterns: with examples in C# and .NET" e vou compartilhar minhas impressões.
É um livro com 11 capítulos, 2 apendíces e aproximadamente 500 páginas. Paguei R$100,00 na Livraria Cultura e chegou em menos da metade das 8 semanas prometidas no site.
Geralmente livros técnicos depois de algumas página se tornam cansativos de ler. Não li nenhum outro livro deste autor anteriormente, mas o cara escreve de uma forma muito gostosa e tranquila de se ler. Nos primeiros dias eu não conseguia fechar o livro. Tive que me segurar pra não passar a madrugada lendo.
Quando comprei o livro imaginei que fosse unicamente a respeito de DDD, mas na prática são poucos os capítulos referentes a esse assunto.
O primeiro capítulo é bastante interessante (principalmente pra quem não está acostumado com agilidade, DDD e Testes) porque ele conceitua esses pontos de uma forma que é impossível não ter vontade de aplicar e ler mais sobre.
A partir dai e durante todo o livro ele apresenta diversos design patterns e como aplicá-los em situações práticas. Existe também um capítulo inteiro sobre TDD que passa por todos os aspectos desde o ciclo de desenvolvimento com TDD, mocks e stubs, e até técnicas de refatoração.
A partir do quarto capítulo que ele comça a falar propriamente dos novos aspectos da modelagem orientada ao domínio e da nova proposta de arquitetura. Sempre com muitos exemplos de código e modelos.
Antes de ler o livro eu havia lido muito a respeito de DDD no GUJ, no resumo do livro do Evans e mais da metade do livro que deu origem ao resumo. Exatamente nesta ordem. Então já estava bem familiarizado com os novos conceitos e já havia aplicado bastante.
Acho que por conta disso, me decepcionei um pouquinho, pois o Jimmy Nilson falou quase nada a respeito de Services e de interações mais complexas entre objetos. Outro ponto que me deixou bastante frustrado foi o fato dos exemplos dos repositórios serem implementados apenas com ORM (NHibernate no caso deste livro). Em Java ORM é uma realidade. Em .NET a coisa ainda está começando a andar com o LINQ, EF.aspx) e o próprio NHibernate, mas a maioria das pessoas ainda implementa acesso a dados na mão. No fundo, acho que o fato de implementar repositório de forma elegante apenas com ORM é um problema do padrão e não do livro (esse é assunto pra um outro post que vai render pedras). Eu particularmente gosto muito de implementar na mão (mais pedras!).
Outro ponto que ficou por último, mas sem menos importância é UI. Ele fala de UI com MVC e MVP inclusive a respeito de como testar a UI. No entanto achei que os exemplos nesse caso não ficaram legais principalmente pelo fato de durante todo o livro o conceito de web ser enfatizado e no caso da UI os testes serem escritos com exemplos em Windows Forms.
Já ao final do livro alguns colegas dele falam a respeito de outros padrões e frameworks tais como: PI utilizando POCO/POJO, SOA, AOP, DI, IoC, NHibernate e SPRING. Inclusive este livro serve como um bom início para o aprendizado desses frameworks, pois os exemplos ilustram cenários bastante reais e práticos.
E por último mais alguns colegas explicam outras abordagens de design de aplicação orientada a domínio.
Se você ficou empolgado por imaginar que fosse encontrar bons exemplos de como testar sua UI nesse livro, acho que essa não é a melhor literatura. Mas para todo o restante dos assuntos é um livro altamente recomendado e que me proporcionou muito aprendizado durante a leitura.