领域驱动设计
weijian.leng
知人者智,自知者明。
展开
-
DDD基础(领域事件)
我们上一章说到聚合的一次状态的修改,就会触发一次仓储的调用。如果涉及到多个聚合之间的状态的修改,我们一般会使用领域事件来驱动,保证多个聚合之间修改后的数据最终一致性。 如何辨别最终一致性? 比如在大家完成事件风暴的过程中,会有如下关键词,“如果…完成后,就…怎么样怎么样。” 再比如,"要是…结束了,我们就开始…的动作。“ 诸如此类,就很有可能是一个领域事件。 领域事件的作用? 比如涉及到跨聚合的状态的修改,在不使用领域事件的时候,我们都是在代码中同步调用的跨聚合的数据状态修改,或者是异步完成。缺点是,领域模原创 2021-10-13 09:00:44 · 302 阅读 · 0 评论 -
DDD基础 (聚合 && 聚合根)
聚合(Aggregate) 聚合根(AggregateRoot) 上一章,我们介绍到了实体和值对象,并且介绍了实体和值对象什么场景下应该如何创建。本章介绍聚合和聚合根。 实体和值对象是我们领域建模的基本单元,我们根据用户的一些业务操作中,业务关联紧密的实体和值对象进行组合,构成聚合(Aggregate),再根据业务语义将多个聚合划定到一个界限上下文中(Bound Context),并在界限上下文内完成建模。 那什么是聚合呢? 举个例子:我们阿里巴巴西溪园区8号楼的每一个员工都是一个个个体(实体,每个人独一无原创 2021-10-13 08:59:32 · 986 阅读 · 0 评论 -
DDD基础 (实体 && 值对象)
实体: 有唯一标识ID用于区分不同的实体,其它的属性值可以任意改变。实体有自己的业务属性、业务行为、业务逻辑。 值对象: 没有唯一的ID标识,一般用于聚合若干个和实体相关的属性。 实体和值对象是领域的原子表达。 举个????:一个Person 实体,里边存在一个唯一的ID用于区分人和人的不同,除了ID不可变,其它的属性可以随意改变,其中有一个Address类,里边聚合了构成地址的详细信息,用于这个实体Person的地址的表达,省、县、街道、国家。是不可变的,也没有ID DDD 为什么要引入值对象的概念? 为原创 2021-10-13 08:58:38 · 916 阅读 · 0 评论