领域驱动设计

Awesome Domain-Driven Design Awesome

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

看看我 blogweekly DDD newsletter 或者打个招呼 Twitter!

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

  • 将项目的主要重点放在核心领域和领域逻辑上
  • 基于领域模型的复杂设计
  • 启动技术专家和领域专家之间的创造性合作,以迭代地完善解决特定领域问题的概念模型

这个词是由埃里克·埃文斯在他的同名书中创造的.

Command Query Responsibility Segregation (CQRS) 只是在以前只有一个对象的情况下创建了两个对象. 分离的发生基于方法是命令还是查询(Meyer 在命令和查询分离中使用的相同定义,命令是任何改变状态的方法,查询是任何返回值的方法).

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

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

Books

Free eBooks

Training Courses

Video Collections

Community Resources

Blogs

  • Nick Chamberlain - 为 .NET 开发人员提供有用的开发和设计建议.
  • Ardalis.com - 史蒂夫史密斯. Pluralsight 作者和作者 DDD Fundamentals 课程和微软 eShopOnWeb sample app.
  • 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、开源爱好者、提交者 @ Apache、云、集成、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 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 - 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
  • Kenny Baas-Schwegler - DDD、BDD、社会技术、事件风暴和持续交付博客.
  • João Rosa - 关于领域驱动设计、视觉协作、领导力和组织设计的个人博客. 以及介于两者之间的其他事情. 策展人 Visual Collaboration Tools 和主持人 Software Crafts Podcast

Sample Projects

GO

.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 - 事件溯源和 CQRS 在 Java 中的实用应用,为常见的相关问题提供了很好的参考,例如事件排序和幂等性.
  • Event Sourcing and CQRS Sample - 带有命令查询职责分离的示例事件源应用程序
  • IDDD Samples - 这些是 Vaughn Vernon 所著的“实施领域驱动设计”一书中的限界上下文示例.
  • Java CQRS Intro - 使用事件溯源实现 CQRS 的示例 - 进化方法(无 CQRS,具有相同模型的单独模型和命令,具有单独模型的单独模型和命令,单独的存储引擎,事件溯源).
  • Kotlin DDD Sample - 用 Kotlin 编写的示例 DDD/CQRS 项目.
  • EventStormingWorkshop - Designing Cloud Native Microservices On AWS - 通过 EventStorming 研讨会并在 Java 中实现 DDD 战术设计模式的具体示例,应用 AWS 云原生服务来构建基于业务事件的 Coffeeshop 场景.
  • DDDSample - 使用 Spring Boot 的示例 DDD 项目(最初托管在 http://dddsample.sourceforge.net/
  • Eclipse CargoTracker - 该项目演示了如何使用领域驱动设计 (DDD) 等广泛采用的架构最佳实践,通过 Jakarta EE 平台开发应用程序. The code 旨在反映开发人员在实际工作中会使用的非平凡应用程序. 它试图直接演示如何使用 Jakarta EE 有效地满足实际的企业问题,例如生产力、敏捷性、可测试性、灵活性、可维护性、可扩展性和安全性. 该项目直接基于众所周知的原创 Java DDD sample application 由 DDD 先驱 Eric Evans 的 Domain Language 公司和瑞典软件咨询公司 Citerus 开发.
  • https://github.com/felipexw/clean-arch-ddd-intro - 使用 Micronaut 的简单 DDD + 清洁架构.

PHP

Libraries and Frameworks

GO

  • Ginkgo - Ginkgo 建立在 Go 的测试包之上,允许进行富有表现力的行为驱动开发(“BDD”)风格的测试.
  • GOBDD - 用于 GO 的小型 BDD 框架.
  • GoConvey - 在浏览器中进行测试. 与go test集成. 用 Go 编写行为测试.
  • Godog - godog 包是 Golang 官方的 Cucumber BDD 框架,它将规范和测试文档合二为一,使用 Gherkin 格式的场景,格式为 Given, When, Then.

.NET

  • Aggregates.NET - 通过 NServicebus 和 GetEventStore 的 .NET 事件源域驱动设计模型.
  • AggregateSource - Lightweight infrastructure for doing eventsourcing using aggregates.
  • Akka.NET - Akka.NET 是一个工具包和运行时,用于在 .NET 和 Mono 上构建高度并发、分布式和容错的事件驱动应用程序.
  • ABP - ASP.NET Boilerplate 的继任者 - 基于 ASP.NET Core 的应用程序框架,用于创建 NLayered、域驱动设计的 Web 应用程序,具有以微服务为中心的模块化架构
  • ASP.NET Boilerplate - 基于 ASP.NET MVC、Web API 和 ASP.NET Core 的应用程序框架,用于创建 NLayered、域驱动设计的 Web 应用程序,实现最佳实践.
  • ByValue - 该库有助于创建具有正确实现的相等行为的 ValueObjects(即使具有集合属性).
  • Cedar.CommandHandling - 通过 HTTP 处理命令的中间件; 通常用于 CQRS 应用程序.
  • Cirqus - d60 事件溯源 + CQRS 框架.
  • CoreDdd - 一组有助于 DDD 和 CQRS 的开源 .NET 库,具有 NHibernate 持久性
  • CQRS on Azure Windows Azure 上的 CQRS.
  • Dolittle - 使用 Dolittle 构建更好的应用程序. 一个面向 DDD 的事件源微服务平台,以开发人员的生产力和简单性为中心.
  • Edument CQRS and Intentful BDD Testing Starter Kit - 关于如何构建 CQRS/ES 应用程序的库和教程,包括 BDD 风格的测试框架.
  • EventFlow - 用于 .NET http://geteventflow.net/ 的 Async/await 第一个 CQRS+ES 和 DDD 框架.
  • Core.EventStore - 用于促进 CommandService 和 QueryService 之间通信的库. 这个想法是,当 commandService 中发生任何事件时,它应该持久化在 MongoDb 中的 QueryService 中.
  • Its.Cqrs - 一组用于 CQRS 和事件溯源的库,具有领域驱动设计风格.
  • Marten - Postgresql 作为 .Net 应用程序的文档数据库和事件存储.
  • MassTransit - .NET 的分布式应用程序框架.
  • MediatR - Supports request/response, commands, queries, notifications and events, synchronous and async with intelligent dispatching via C# generic variance.
  • 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.
  • NetDevPack - 一组智能的通用类和实现,可使用 .NET(DDD、CQRS、规范模式、MediatR、验证、通知)提高您的开发效率.
  • NEventStore - 一个持久化库,用于在使用事件溯源作为存储机制时抽象不同的存储实现.
  • NServiceBus - .NET 的服务总线.
  • Projac - Projac 是一组投影库,允许您编写针对各种后备存储的投影.
  • shriek-fx - 使用 .NET Core 2.0 开发的简单、优雅且有用的领域驱动设计和 CQRS 框架.
  • SqlStreamStore - .NET Stream Store 库针对基于 SQL 的实现.
  • Streamstone - Azure 表存储的事件存储.
  • Stringly.Typed - 使字符串与 .NET 类型之间的转换更容易.
  • 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 - 业务事件捕获和查询框架.
  • Message DB - Microservice Native Event Store and Message Store for Postgres. A fully-featured event store and message store implemented in PostgreSQL for Pub/Sub, Event Sourcing, Messaging, and Evented Microservices applications.
  • Serialized - 事件溯源和 CQRS 的完整平台.

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 - axon 框架专注于让想要基于 CQRS 原则创建 Java 应用程序的开发人员更轻松.
  • DDDplus framework - 基于DDD的复杂业务架构的轻量级灵活开发框架.
  • JESA - Java 的事件源聚合.
  • Lagom - Lagom 框架是用于 Java 虚拟机的微服务框架,具有用于 Java 和 Scala 语言的 API. 它包括一个基于事件源/CQRS 的持久性模块.
  • SeedStack's Business Framework - 一组构建块,使您能够根据领域驱动设计 (DDD) 方法对业务逻辑进行编码.
  • Spine Event Engine - 用于构建云应用程序的 CQRS/ES 框架. 在 Protobuf 中定义有界上下文及其命令、事件和实体状态. 后端逻辑是用 Java 编写的,位于 Proto 生成的代码之上. Java、JS 或 Dart 中的客户端代码通过 gRPC 与后端通信.

PHP

  • Broadway - Broadway 是一个 (PHP) 项目,为创建 CQRS 和事件源应用程序提供基础设施和测试助手.
  • Ecotone - 在 PHP 中启用消息驱动架构并提供构建块以遵循 DDD 和 CQRS 原则.

Python

  • Eventsoucing in Python - 用于事件溯源和 DDD 的成熟、稳定的 Python 库. 支持多种数据库、不同类型的域事件排序、应用程序级加密、快照、乐观并发控制和处理事件. 应用程序和整个应用程序系统可以独立于基础设施进行定义,并以不同的方式(单线程、多线程、时钟、步进、多进程、参与者模型)和不同的基础设施运行.
  • dry-python - 一组用于可插拔业务逻辑组件的库.

Ruby

  • Eventide - Ruby 的事件溯源和微服务堆栈. 一组用于编写事件驱动的自治服务的库.
  • Rails Event Store - Rails Event Store (RES) 是一个用于发布、使用、存储和检索事件的库. 它是为 Rails 应用程序使用事件驱动架构的最佳伴侣.

Podcasts and Interviews

Conferences

User Groups

Tools

License

CC0

在法律允许的范围内, Nick Chamberlain 已放弃本作品的所有版权和相关或邻接权.