领域驱动设计

Awesome Domain-Driven Design Awesome

>域驱动设计(DDD),命令查询责任隔离(CQRS),事件来源和事件风暴资源的精选列表.

检查我 blogweekly DDD newsletter 或打个招呼 Twitter!

Domain-Driven Design (DDD) 是一种通过将实现与不断发展的模型相连接来满足复杂需求的软件开发方法. 域驱动设计的前提如下:

-将项目的主要重点放在核心领域和领域逻辑上 -根据领域模型建立复杂的设计 -在技术专家和领域专家之间发起创新合作,以迭代方式完善解决特定领域问题的概念模型

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

Command Query Responsibility Segregation (CQRS) 只是在以前只有一个的两个对象的创建. 根据方法是命令还是查询来进行分隔(与Meyer在“命令和查询分隔”中使用的定义相同,命令是使状态发生变化的任何方法,而查询是返回值的任何方法).

Event Sourcing事件源的基本思想是确保在事件对象中捕获对应用程序状态的每次更改,并且这些事件对象本身按照与应用程序状态本身相同的生命周期应用的顺序存储. .

Event Storming是一种研讨会形式,用于快速探索复杂的业务领域.

Books

Free eBooks

Training Courses

Video Collections

Community Resources

Blogs

  • Nick Chamberlain -为.NET开发人员提供有用的开发和设计建议.
  • DDD Weekly -与DDD / CQRS / ES相关的每周精选链接.
  • Daniel Whittaker -想了解CQRS和事件来源吗? 该博客中包含分步指南,以帮助您起步.
  • Cyrille Martraire -在沉迷于金融的同时仍然热衷于编程,所以我自然是Eric Evans的领域驱动设计以及TDD,BDD和敏捷/ XP实践的忠实拥护者.
  • Jimmy Bogard -我专注于DDD,分布式系统以及任何其他以缩写词为中心的设计/体系结构/方法.
  • CodeBetter -CodeBetter.Com的存在是为了帮助在软件开发社区中提高对更好的实践,高级工具,行之有效的方法论和技术的认识.
  • Greg Young -足够好的软件从定义上讲是足够的.
  • InfoQ Blog -InfoQ上的域驱动设计内容.
  • Dan North -行为驱动设计的发明者. 有关事件风暴的博客和讨论.
  • Mike Mogosanu -可维护的代码是业务优势. 域地图的创建者:域建模工具-简单而强大的域驱动设计.
  • Christian Posta -Red Hat首席中间件架构师@ Red Hat,开源爱好者,Apache @ Cloud,Integration,Kubernetes,Docker,OpenShift和Fabric8的提交者.
  • Vladimir Khorikov -Pluralsight作者. 有关软件开发原理和最佳实践的博客.
  • TechBeacon -TechBeacon上的文章标记了“域驱动设计”.
  • Derek Comartin -“域驱动设计”类别下的文章.
  • Alberto Brandolini -事件风暴的发明者. 断言问题无法用产生问题的相同思路来解决,因此Alberto经常以建筑师,导师,教练,经理或开发人员的观点来交换观点.
  • Jérémie Chassaing - Various articles about DDD/CQRS. Implemented Greg Young's SimpleCQRS sample in F#.
  • Vaughn Vernon -沃恩·弗农(Vaughn Vernon)了解软件开发的独特需求以及在快速发展的行业中提高自己的技能时所面临的挑战.
  • Vladik Khononov -各种与DDD相关的文章.
  • Eventsourcing Publications -实用的事件来源.
  • Jef Claes -有关领域驱动设计的优秀文章和讲座.
  • Udi Dahan -来自NServiceBus的创建者.
  • Chris Patterson -来自MassTransit分布式应用程序框架的创建者.
  • Aaron Stannard -来自Petabridge的CTO和联合创始人,Akka.NET Actor Model框架的开发人员.
  • Roger Johansson - Mostly C#, DDD, and Akka.NET.
  • Konrad Garus -Java,Clojure和JavaScript中的编程和编程. 在 cqrs 下标记的文章.
  • Oasis Digital -由Oasis Digital在 cqrs 下标记的内容.
  • Adaptech -Adaptech Solutions博客. 我们的创始人Adam Dymitruk在Greg创造这个词之前就与Greg Young辩论了CQRS的优点. Adam和业务合作伙伴Robert Reppel都是事件源微服务的领先实践者.
  • Lev Gorodinski -2013年以来有关DDD的几篇文章仍然相关.
  • Dino Esposito -软件架构师,培训师,书籍作者. 的作者 Microsoft .NET - Architecting Applications for the Enterprise (2nd Edition).
  • Dan Bergh Johnsson "Dear Junior" -域驱动设计结合了安全性和敏捷性. 写给年轻程序员的虚构信.
  • the native web -DDD&Co.系列
  • Arkency -来自Ruby专家的各种DDD,CQRS,事件源相关文章.
  • Svaťa Šimara -DDD系列-语言,领域,建模,基础结构,PHP实现
  • Martin Havlišta - DDD, CQRS, TDD blog posts with code samples in C# .NET
  • Khalil Stemmler -DDD系列简介,并讨论如何使用TypeScript实现DDD

Sample Projects

.NET (C#/F#)

Haskell

  • Eventuria gsd -Haskell待办事项列出了具有DDD,CQRS和事件源,FRP的响应式应用程序.

JavaScript

JVM languages

  • Akka CQRS ES Demo -演示项目,用于在Scala-Akka中实现CQRS和事件源模式.
  • DDD By Examples - Library -由实际业务需求驱动的图书馆样本项目. 借助DDD,BDD,EventStorming,示例映射,CQRS等实现的模块化整体.
  • DDD Leaven -DDD-CQRS示例v2.0项目,可帮助您使用Spring,JPA和测试开始高级域建模.
  • DDD Workshop - Project Manager -“自己动手” DDD研讨会和一个示例DDD应用程序同时进行. 基于项目管理域.
  • Event Sourcing Example -Java代码的事件源和CQRS实现的简化(内存中)示例(针对银行领域用例建模).
  • Event Sourcing and CQRS Examples -Java中的事件源和CQRS的实用应用程序,对于常见的相关问题(例如事件顺序和幂等)具有很好的参考.
  • Event Sourcing and CQRS Sample -示例事件源应用程序,带有命令查询责任隔离
  • IDDD Samples -这些是沃恩·弗农(Vaughn Vernon)的“实施域驱动设计”一书中的示例绑定上下文.
  • Kotlin DDD Sample -用Kotlin编写的示例DDD / CQRS项目.

PHP

Libraries and Frameworks

.NET

  • Aggregates.NET -通过NServicebus和GetEventStore的.NET事件源域驱动的设计模型.
  • AggregateSource -轻量级基础架构,用于使用聚合进行事件外包.
  • Akka.NET -Akka.NET是一个工具包和运行时,用于在.NET和Mono上构建高度并发,分布式和容错的事件驱动的应用程序.
  • ASP.NET Boilerplate -基于ASP.NET MVC,Web API和ASP.NET Core的应用程序框架,可创建实现最佳实践的NLayered,域驱动设计的Web应用程序.
  • Cedar.CommandHandling -通过HTTP处理命令的中间件; 通常用于CQRS应用程序.
  • Cirqus -d60事件源+ CQRS框架.
  • CoreDdd -一组有助于DDD和CQRS,具有NHibernate持久性的开源.NET库
  • CQRS on Azure Windows Azure上的CQRS.
  • Dolittle -使用Dolittle构建更好的应用程序. 一个基于事件的,基于DDD的微服务平台,具有开发人员的生产力以及简洁的前端和中心.
  • EventFlow -异步/等待用于.NET http://geteventflow.net/的第一个CQRS + ES和DDD框架.
  • Its.Cqrs -一组具有域驱动设计风格的CQRS和事件源库.
  • MassTransit -.NET的分布式应用程序框架.
  • MessageRouter -在此视频中进行了介绍: 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 -使用事件源作为存储机制时,用于抽象化不同存储实现的持久性库.
  • NServiceBus -.NET的服务总线.
  • Projac -Projac是一组投影库,使您可以编写针对各种后备店的投影.
  • shriek-fx -使用.NET Core 2.0开发的简单,优雅且有用的域驱动设计和CQRS框架.
  • SqlStreamStore -面向基于SQL的实现的.NET流存储库.
  • Streamstone -Azure表存储的事件存储.
  • Stringly.Typed -使字符串与.NET类型之间的转换更加容易.
  • Value - Help you to easily implement Value Types in your C# projects without making errors nor polluting your domain logic with boiler-plate code.
  • Xer.Cqrs - A simple library for creating applications based on the CQRS pattern with support for attribute routing and hosted handlers. Developed in C# targeting .NET Standard 1.0.

Databases

  • Event Store -具有JavaScript中复杂事件处理功能的开源功能数据库.
  • Eventsourcing -业务事件捕获和查询框架.

Elixir

  • Commanded -适用于CQRS / ES应用程序的命令处理中间件,用于集合和流程管理器的纯功能数据结构,点对点消息路由以及Elixir(Erlang VM)中的更多功能-Actor并发模型中的所有功能.
  • Event Bus -具有基于ETS的内置事件存储和事件观察程序的Elixir可追溯,可扩展且极简的事件总线实现.
  • eventstore -使用PostgreSQL进行持久化的CQRS事件存储.

JavaScript

JVM

  • akka-ddd -可重用的工件,用于基于CQRS / DDDD的方法在Akka平台上构建应用程序.
  • Apache Isis -Apache Isis是一个框架,用于以Java快速开发域驱动的应用程序.
  • Axon Framework -轴突框架专注于使希望基于CQRS原理创建Java应用程序的开发人员的工作更加轻松.
  • JESA -Java的事件源聚合.
  • Lagom -Lagom框架是用于Java虚拟机的微服务框架,具有用于Java和Scala语言的API. 它包括一个基于事件源/ CQRS的持久性模块.
  • SeedStack's Business Framework -一组构建块,使您能够根据域驱动设计(DDD)方法对业务逻辑进行编码.

PHP

  • Broadway -Broadway是一个(PHP)项目,为创建CQRS和事件源应用程序提供基础结构和测试帮助程序.

Python

  • Eventsoucing in Python -成熟,稳定的Python库,用于事件源和DDD. 支持各种数据库,域事件的不同排序,应用程序级别加密,快照,乐观并发控制和流程事件. 可以独立于基础架构定义应用程序以及整个应用程序系统,并以不同的方式(单线程,多线程,计时,步进,多进程,参与者模型)和不同的基础架构运行.

Ruby

  • Rails Event Store -Rails Event Store(RES)是一个用于发布,使用,存储和检索事件的库. 它是为Rails应用程序使用事件驱动的体系结构的最佳伴侣.

Podcasts and Interviews

Conferences

User Groups

Tools

License

CC0

在法律允许的范围内, Nick Chamberlain 放弃了此作品的所有版权以及相关或邻近的权利.