关于领域驱动设计(DDD)中聚合设计的一些思考 原文: 关于领域驱动设计(DDD)中聚合设计的一些思考 关于DDD的理论知识总结,可参考这篇文章。 DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/library/vernon_2011/,该地址中包含了一篇关于介绍如何有效的设计聚合的一些原则,共3个pdf文件。该文章中指出了以下几个聚合设计的原则: 聚合是用来封装真正的不变性,而不是简单的将对象组合在一起; 聚合应尽量设计的小; 聚合之间的关联通过ID,而不是对象引用; 聚合内强一致性,聚合之间最终一致性; 上面这几条原则,作者通过一个例子来逐步阐述。下面我按照我的理解对每个原则做一个简单的描述。 聚合是用来封装真正的不变性,而不是简单的将对象组合在一起 这个原则,就是强调聚合的真正用途除了封装我们本身所关心的信息外,最主要的目的是为了封装业务规则,保证数据的一致性。在我看来,这一点是设计聚合时最重要和最需要考虑的点;当我们在设计聚合时,要多想想当前聚合封装了哪些业务规则,实现了哪些数据一致性。所谓的业务规则是指,比如一个银行账号的余额不能小于0,订单中的订单明细的个...
不相交集类 等价关系:自反性,对称性,传递性 class DisjSets//不相交集的类架构 { public: explicit DisjSets(int numElements); int find(int x) const; int find(int x); void unionSets(int root1,int root2); void unionSets2(int root1,int root2); private: vector<int> s; }; DisjSets::DisjSets(int numElements) : s(numElements)//初始化 { for(int i=0 ; i < s.size() ; i++) s[i] = -1; } void DisjSets::unionSets(int root1,int root2) { s[root2] = root1; } void DisjSets::unionSets2(int root1,int root2) { if( s[root2] < s[root1]) s[root1] ...