Praise for Dino Esposito and Andrea Saltarello’s new book on architecting applications

Today we have a guest blog post from Cesar De la Torre, who served as peer reviewer on Dino Esposito and Andrea Saltarello’s new book, Microsoft .NET: Architecting Applications for the Enterprise, Second Edition . Cesar is also the .NET Product Manager at Microsoft Corporation and a co-author of .NET Technology Guide for Business Applications, one of our free ebooks. Enjoy!


Cesar here!

Several months ago, I became intrigued when Microsoft Press told me about a possible new book from Dino Esposito and Andrea Saltarello that would focus on enterprise application development and architecture. After getting in contact with Dino and reviewing some of the early content, much of which was related to Domain-Driven Design (DDD) approaches, I really wanted to offer my support and collaborate on this book. When Microsoft Press asked me to serve as the peer reviewer, I happily accepted.

Enterprise application development turns complex as soon as you move beyond simple data-driven applications and start addressing core-domain areas. When tackling complexity in enterprise scenarios, the key to controlling complexity is to have a good domain model, or, even better, a good identification of the different subsystems or Bounded-Contexts, and then creation of a good domain model for each Bounded-Context. DDD tries to simplify complex domains by segregating them into different subsystems. It really is about "divide and conquer." Each of those subsystems or bounded-contexts could be very different and therefore could have a very different architectural approach as well. We shouldn't try to lead with a unique top-level architecture that addresses any application or subsystem. “A single architecture to rule them all" approach is not a good idea for complex enterprise software. This is precisely what this book tries to show you. Dino and Andrea are saying: Let's have an open mind and design different architectures depending on your subsystems' needs.

This book is not just about architectural approaches but also about patterns implementation in .NET (although you could implement most approaches in any other development platform). To me, that implementation process is critical. In domain modeling, you shouldn't separate the logic, domain concepts, and architecture from the implementation. A good software architect and domain modeler shouldn't just use a whiteboard with domain experts; he should also write .NET code so the "ubiquitous language" used by the domain experts is directly transferred to the code and domain model implementation. That’s a very powerful way of connecting domain experts with technology experts—and I believe that kind of trust will produce the best software. So, as early as possible, it is important to say, "Show me the code!” You cannot merely design and architect, then build and implement if you want to create good software. When modeling domains and software in general, the best ideas come after the initial application beta releases produced by any number of sprints. It has to be an iterative process in which the .NET code is projected as the domain model as early as possible.

I think that Dino and Andrea's approach in this book will be very beneficial to .NET developers because they begin the way a .NET developer traditionally would. Many .NET developers are used to building layered applications and data-driven apps. Dino and Andrea start from there and evolve the story towards Domain-Driven architectural approaches, even covering CQRS and Event-Sourcing approaches for specific needs. But they tell you the story in a way that makes .NET developers feel pretty comfortable. Dino himself has come a long way since working with .NET since its inception, so he knows how we .NET developers feel.

One final yet important thought: The biggest value of this book is that Dino and Andrea are telling the story based on the successes and disappointments they encountered while implementing complex and scalable enterprise applications. Patterns and architectural approaches are important, but there is tremendous value in learning from real enterprise projects. That great value is provided in this book.