Last month I read ‘Microsoft .NET: Architecting Applications for the Enterprise’, written by Dino Esposito and Andrea Saltarello. This book is a great piece of work.
Microsoft .NET: Architecting Applications for the Enterprise discusses many design principles and applies them to the .NET space. There are a wide range of concepts, patterns, and technologies discussed. The book discusses the layers of a default architecture, such as Data Access Layer, Business Layer, Service Layer, and Presentation Layer. Each of these layers are discussed in their own chapter and relevant patterns and practices are discussed with each layer.
The book discusses concepts like: Separation of Concerns, the Open/Closed Principle, Liskov Substitution Principle, Object-Relational Mapping, and Aspect-Oriented Programming. The book also discusses patterns such as Transaction Script, Table Module, Active Record, Domain Model, Data Transfer Object, Inversion of Control, Model-View-Controller, and Model-View-Presenter.
A lot of the subjects, frameworks and patterns in this book deserve a book of their own, therefore the book doesn’t discuss most of them in-depth, but this -in my opinion- is actually the beauty of the book; most of the time it discusses just enough to get a good picture of the considerations you will have to make as an architect. It gives you a great start for further exploration.
What I especially like about the book is the discussion on topics like the Domain Model and Data Transfer Objects. Dino and Andrea discuss the Domain Model Pattern and do a good job in explaining the difficulties with it. I’ve read Jimmy Nilsson’s book about Domain-Driven Design. While I love Jimmy’s book, he never discussed the Domain Model’s tradeoffs, Architecting Applications for the Enterprise actually does explain this. The bottom line is: Domain Model isn't suited for every organization; you should choose wisely and Dino and Andrea help you to make that decision.
With the use of Data Transfer Objects (DTO), the writers explain that DTOs are good for separating the Domain layer from the Presentation layer, but also warn that "In large projects with so many entities, DTOs add a remarkable level of (extra) complexity and work to do". Dino's recent MSDN article is basically a summary of that discussion in the book.
I had one big annoyance with the book though, which is it’s extensive use of acronyms. For instance, after discussing a new pattern, such as Transaction Script, Table Module, Active Record, or Domain Model (and many more), the remainder of the book referred to their acronyms TS, TM, AR, and DM. More than once I had to go back many pages to figure out what a certain acronym meant.
My final conclusion is that this is a great book. In case you want to know more about architecture applied to .NET concepts, you’d better start reading this book!