Skip to content
gqlxj1987's Blog
Go back

Domain Design

Edit page

原文链接

DDD的核心思想可以认为是两个:

分为不同的子领域和绑定上下文部分

通过将问题领域分割为多个子领域,复杂的问题得以简化;通过聚焦于核心领域,核心的商业价值得以最大化。每一个子领域和围绕它形成的领域专家和技术专家共同产生和维护的统一语言构成了特定的绑定上下文。

领域并不是组件、模块等纯软件概念

我们界定绑定上下文的边界的时候,必须避免软件架构技术产生决定性的影响;因为这一方法的指导性原则是,需要倾听和修正领域模型和语言边界,而不是软件架构实现技术的边界。

上下文映射关系

依赖倒置原则其实从某种程度上来看打破了传统的分层架构的严谨性,但是同时又允许更大的灵活性,因为组织依赖上都要求大家尽量依赖于抽象而不是依赖于具体的实现;甚至可以认为层次的概念呗弱化的同时,软件的灵活性还得到了保证。

这一架构风格原来也被称为是六边形架构;或者另外一个所谓的洋葱架构指向的也是这种风格

CQRS

CQRS即命令和查询职责分离的简称;这一做法要求我们任何一个方法要么负责查询,要么负责执行命令修改状态;但是永远不要将两者混合在一起。依据这种做法,传统的领域模型就不得不分为两个部分:一个子模型负责查询,另外一个则负责执行命令

Event Sagas用于描述长期运行、持续不断的事件处理过程;有如下三种常见的办法来描述长期运行的长时间处理过程

Event Sagas的方式要求我们必须拥抱最终一致性模型,并且妥善处理好超时和重试处理,尽量补偿可能出现的异常情况,甚至在情况复杂的时候尽量引入工作流来降低领域问题的复杂性。

领域驱动开发的核心是关于领域的行为和特征,而不是数据的获取和读取。之所以要用领域实体的概念来封装业务特征,而不是直接在数据集的基础上采用CRUD来直接实现业务规则,主要是因为系统的业务复杂度不断提高的时候,直接CRUD的方式带来了软件复杂度的急剧上升。

不论怎样选择这里的角色抽象,需要始终牢记的是跨职能团队根据领域业务逻辑而统一的领域语言才是决定这些角色和实体类的职责的最重要的因素,而实际实现这些抽象的面性对象技术应该作为具体实现的支撑细节。


Edit page
Share this post on:

Previous Post
Spring Reactive Programing
Next Post
why kafka productive