Architecting applications for the enterprise

Download the workshop slides here

Dino Esposito

Get a fresh perspective on real-world software design: from DDD to CQRS, and from both up to Event Sourcing.

Overview

The purpose of this class is to present the state-of-the-art of software architecture, and to discuss a few implementations primarily but not exclusively on top of the .NET Framework.

Domain-driven design (DDD) emerged a decade ago as a very engaging way to tackle complexity in the heart of software. Today we need to split the DDD approach into two distinct parts: analytical and strategic.

The analytical part of DDD is about defining a ‘ubiquitous language’ to share with stakeholders and ‘bounded contexts’ to lay out the definitive domain architecture. In a nutshell, DDD analysis is about understanding the business processes and the structure of the client organization. This type of knowledge is essential to model an appropriate software architecture.

The strategic part of DDD is about choosing the ideal software architecture for each bounded context, in accordance with a few parameters such as expected lifespan of the software, skills, legacy code and the canonical costs and deadlines.

This class provides a pragmatic view of domain-driven software development and weds together architectural patterns with concrete technologies and frameworks. Through the evolution of software design practices, the class aims to help you decide for yourself whether CRUD, CQRS, Domain Model or event-driven architecture are most appropriate.

This class won’t evangelistically promote any specific approach or technology, but dissects the recent dynamics of software design to highlight what makes each pattern suitable (or unsuitable) for a particular business scenario.

The litmus test of this class is fairly simple and ambitious at the same time. The class will have worked if, after taking it, you feel like it is all coming into place.

Takeaways

  • Discover the natural architecture of a system using ubiquitous language and bounded contexts
  • Take a user experience (UX) first approach, rather than designing for data
  • Found your design on distinct command and query stacks rather than comprehensive models
  • Use event-sourcing and CQRS together to model complex business domains more effectively
  • Reconsider the role of the database - a polyglot layer rather than a product
  • Reconsider tools and strategies for scalability and performance
  • Understand the scope and impact of devices in architecture

Note

All the code shown during the class uses C# and the Microsoft .NET Framework. However, this is only for convenience - much of the content of this class is language and platform independent.

Format

This class isn’t purely presentation-based – there will be numerous conceptual demos and excerpts from sample applications as well as real-world projects.

Target audience

Developers and lead developers keen to grow professionally by learning design principles and architectural patterns to apply in their work. The class also addresses the needs of project managers and IT managers who co-ordinate the various phases of the software development process, and aims to give them solid skills to better understand what’s going on these days in software, and communicate with super-skilled developers and architects. Finally, the class will also be relevant for solution architects who need a crisp refresher or who are looking for a new perspective to rejuvenate their design spirit.

Speaker profile

Dino

Dino Esposito

A long-time trainer and top-notch consultant, Dino is the author of many popular books for Microsoft Press which have helped the professional growth of thousands of .NET developers and architects. CTO of a fast-growing company providing software and mobile services to professional sports, at the moment Dino is also a technical evangelist for JetBrains, where he focuses on Android and Kotlin development, and a member of the team that manages WURFL - the database of mobile devices used by organizations such as Google and Facebook. Recently, Dino co-authored (along with Andrea Saltarello) the second edition of bestseller Microsoft .NET: Architecting Applications for the Enterprise (Microsoft Press). http://crionet.com  @despos