Software Architecture with Domain-Driven Design Awesome

Working Architecture

When working on a software project, it is primordial to dedicate time to get a good software architecture, because if you think about, it’s the base of all the projects. To build an emergent, raising architecture with almost infinite scalability, DDD is maybe the Best solution.

Domain-Driven Design (DDD) is an approach to software development for complex needs by connecting the implementation to an evolving model. The premise of Domain-Driven Design is the following:

  • placing the project's primary focus on the core domain and domain logic
  • basing complex designs on a model of the domain
  • initiating a creative collaboration between technical and domain experts to iteratively refine a conceptual model that addresses particular domain problems

The term was coined by Eric Evans in his book of the same title.

Command Query Responsibility Segregation (CQRS) is simply the creation of two objects where there was previously only one. The separation occurs based upon whether the methods are a command or a query (the same definition that is used by Meyer in Command and Query Separation, a command is any method that mutates state and a query is any method that returns a value).

Event Sourcing the fundamental idea of Event Sourcing is that of ensuring every change to the state of an application is captured in an event object, and that these event objects are themselves stored in the sequence they were applied for the same lifetime as the application state itself.

Event Storming is a workshop format for quickly exploring complex business domains.

Contents

Books

Training Courses

Video Collections

Community Resources

  • DDD/CQRS Google Group - An active mailing list and an excellent resource to ask questions and learn fine-grained details about DDD/CQRS.
  • Domain Driven Design Yahoo Group - This group is for discussion of the domain-driven style of designing software, and the book by Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Business Software. Questions and discussion of the book content is welcome here, as well as sharing of experiences applying DDD, and discussions of the topic in general.
  • DDDinPHP Google Group - The place to discuss Domain-Driven Design, CQRS, Event Sourcing, Model Storming, Hexagonal Architecture, Distributed Systems, Reactive... in the context of PHP.
  • DDD in Ruby subreddit - A subreddit for Ruby developers interested in Domain-Driven Design.
  • EventStormers Google+ Community - A public discussion group for everybody interested in EventStorming, and related themes.
  • DDD/CQRS/ES Slack - A slack team for those who want to chat about Domain-Driven Design, CQRS, Event Sourcing and sometimes random things. Main channel is language and framework agnostic.
  • Domain StoryTelling Slack - A slack team about Domain StoryTelling. It is currently invite only, but you can ask @hofstef for an invitation. The homepage is at domainstorytelling.org.
  • Software Engineering Stack Exchange - Software Engineering Stack Exchange questions tagged domain-driven-design.
  • Code Review Stack Exchange - Code Review Stack Exchange questions tagged domain-driven-design.
  • Stack Overflow - Stack Overflow questions tagged domain-driven-design.
  • Quora - Questions tagged domain-driven-design.

Blogs

  • Nick Chamberlain - Helpful development and design advice for .NET developers.
  • DDD Weekly - Weekly curated links related to DDD/CQRS/ES.
  • Daniel Whittaker - Want to learn about CQRS and Event Sourcing? This blog is packed with step-by-step articles to give you a head start.
  • Cyrille Martraire - Being so immersed in finance while still in love with programming, I’m naturally a big fan of Domain-Driven Design by Eric Evans, along with TDD, BDD and agile/XP practices.
  • Jimmy Bogard - I focus on DDD, distributed systems, and any other acronym-centric design/architecture/methodology.
  • CodeBetter - CodeBetter.Com exists in order to help foster awareness of better practices, superior tools, proven methodologies and techniques within the software development community.
  • Greg Young - Good Enough Software is By Definition Good Enough.
  • InfoQ Blog - Domain-Driven Design Content on InfoQ.
  • Dan North - Inventor of Behavior-Driven Design. Blogs and talks about Event Storming also.
  • Mike Mogosanu - Maintainable code is a business advantage. Creator of Domain Map: The Domain Modeling Tool - Easy And Powerful Domain Driven Design.
  • Christian Posta - Principal Middleware Architect @ Red Hat, open-source enthusiast, committer @ Apache, Cloud, Integration, Kubernetes, Docker, OpenShift, Fabric8.
  • Vladimir Khorikov - Pluralsight author. Blogs about software development principles and best practices.
  • TechBeacon - Articles on TechBeacon tagged domain driven design.
  • Derek Comartin - Articles under the category Domain Driven Design.
  • Alberto Brandolini - Inventor of Event Storming. Asserting that problems cannot be solved with the same mindset that originated them, Alberto switches perspective frequently assuming the architect, mentor, coach, manager or developer point of view.
  • Jérémie Chassaing - Various articles about DDD/CQRS. Implemented Greg Young's SimpleCQRS sample in F#.
  • Vaughn Vernon - Vaughn Vernon understands the unique demands of software development and the challenges you face as you improve your craft in a fast-paced industry.
  • Vladik Khononov - Various DDD-related articles.
  • Eventsourcing Publications - Practical event sourcing.
  • Jef Claes - Excellent articles and talks on Domain-Driven Design.
  • Udi Dahan - From the creator of NServiceBus.
  • Chris Patterson - From the creator of the MassTransit distributed application framework.
  • Aaron Stannard - From the CTO and co-founder of Petabridge, developers of the Akka.NET Actor Model framework.
  • Roger Johansson - Mostly C#, DDD, and Akka.NET.
  • Konrad Garus - Ranting and Programming in Java, Clojure, and JavaScript. Articles tagged under cqrs.
  • Oasis Digital - Content by Oasis Digital tagged under cqrs.
  • Adaptech - Adaptech Solutions blog. Our founder, Adam Dymitruk, debated the merits of CQRS with Greg Young before Greg coined the term. Adam and business partner Robert Reppel are among the leading practitioners of event-sourced microservices.
  • Lev Gorodinski - Several articles about DDD from 2013, which are still relevant.
  • Dino Esposito - Software architect, trainer, book author. Author of Microsoft .NET - Architecting Applications for the Enterprise (2nd Edition).
  • Dan Bergh Johnsson "Dear Junior" - Domain-Driven Design mixed with security, and agile in general. Written as fictional letters to a younger programmer.
  • the native web - DDD & Co. series
  • Arkency - Various DDD, CQRS, Event Sourcing related articles from Ruby experts.

Sample Projects

Libraries and Frameworks

  • Event Store - The open-source, functional database with Complex Event Processing in JavaScript.
  • Axon Framework - The axon framework is focused on making life easier for developers that want to create a java application based on the CQRS principles.
  • MessageRouter - Described in this video: The Beating Heart of CQRS, or Actor-Based Message Routing on the CLR by Paulmichael Blasucci at the New York F# .NET User Group.
  • NEventStore - A persistence library used to abstract different storage implementations when using event sourcing as storage mechanism.
  • Projac - Projac is a set of projection libraries that allow you to write projections targetting various backing stores.
  • Streamstone - Event Store for Azure Table Storage.
  • Value - Help you to easily implement Value Types in your C# projects without making errors nor polluting your domain logic with boiler-plate code.
  • Cirqus - d60 event sourcing + CQRS framework.
  • Its.Cqrs - A set of libraries for CQRS and Event Sourcing, with a Domain-Driven Design flavor.
  • AggregateSource - Lightweight infrastructure for doing eventsourcing using aggregates.
  • JESA - Event sourced aggregates for Java.
  • EventFlow - Async/await first CQRS+ES and DDD framework for .NET http://geteventflow.net/.
  • cqrs.js - CQRS implementations in node.js. Includes node-eventstore, node-cqrs-domain, node-eventdenormalizer, node-cqrs-saga.
  • Eventsourcing - Business event capture and querying framework.
  • CQRS on Azure CQRS on Windows Azure.
  • SeedStack's Business Framework - A set of building blocks that enable you to code business logic according to the Domain-Driven Design (DDD) approach.
  • SqlStreamStore - .NET Stream Store library targeting SQL based implementations.
  • Cedar.CommandHandling - Middleware to handling commands over HTTP; typically used in CQRS applications.
  • NServiceBus - Service bus for .NET.
  • MassTransit - Distributed Application Framework for .NET.
  • Akka.NET - Akka.NET is a toolkit and runtime for building highly concurrent, distributed, and fault tolerant event-driven applications on .NET & Mono.
  • ASP.NET Boilerplate - ASP.NET MVC, Web API and ASP.NET Core based application framework to create NLayered, Domain Driven Designed web Applications implementing best practices.
  • Aggregates.NET - .NET event sourced domain driven design model via NServicebus and GetEventStore.
  • Stringly.Typed - Making it easier to convert strings to/from .NET types.
  • Commanded - Command handling middleware for CQRS/ES applications, Pure Functional Data Structures for Aggregates and Process Managers, Point-to-Point message routing, and much more in Elixir (Erlang VM) - All in Actor concurrency model.
  • akka-ddd - Reusable artifacts for building applications on top of the Akka platform following CQRS/DDDD-based approach.
  • eventstore - CQRS event store using PostgreSQL for persistence.
  • Node API Boilerplate - NodeJS web API boilerplate for DDD and Clean Architecture applications.
  • wolkenkit - A CQRS, DDD, and event-sourcing framework for JavaScript and Node.js.
  • Broadway - Broadway is a (PHP) project providing infrastructure and testing helpers for creating CQRS and event sourced applications.
  • shriek-fx - An simple,elegant and useful Domain-Driven Design and CQRS framework developed using .NET Core 2.0.
  • Rails Event Store - Rails Event Store (RES) is a library for publishing, consuming, storing and retrieving events. It's your best companion for going with an event-driven architecture for your Rails application.

Podcasts and Interviews

Conferences

User Groups