聚合的划分(二)---再次总结

聚合划分原则:

  1. 有很多个实体、值对象表现了一个完整的概念,他们之间是有很强关联的。
  2. 找最小的业务场景
  3. 找出聚合根(先确定可能是聚合根的实体,可能包含的实体),确定的原则是:具有独立的生命周期
  4. 确定聚合根的边界,如包括 Entity1,E2,E3.。。。这些实体要依赖于聚合根的存在而存在。聚合边界确定法则:根据不变性约束规则(Invariant),有两类:1)聚合边界内必须具有哪些信息,如果没有这些信息就不能称为一个有效的聚合;2)聚合内的某些对象的状态必须满足某个业务规则;
  5. 对象间是有规则的(如余额不为0,名称不能空,某实体不能0个),而且能影响到对方。
  6. 对象都有相同的生命周期。
  7. 对象太多,如超过了8-10个,不行,不能太大。性能不好了。如不知道该放还是不放,不明确的时候就不放一起。

反向验证:

  1. 验证一个实体是否属于这个聚合:他还可以属于其他聚合吗?离开了这个聚合根是不是就失去了意义。
  2. 实体变化了,影响聚合根的内容了吗?

再次验证:

  1. 是否“同生死,共存亡”,没有了这个实体,是否这个聚合或者是业务规则就不完整了;

聚合根的特征:(怎样找到聚合根)

  1. 可以独立存在
  2. 有独立的生命周期(生命开始和结束)。
  3. 其他实体或对象依赖它而存在
  4. 具有全局的唯一标识
  5. 除了唯一标识外,其他的所有属性都是可变的。

值对象的特征:

  1. 只读的
  2. 没有唯一标识,不存在这个值对象或那个值对象的说法;
  3. 没有生命周期,因为只是一个值。

实体的特征:

  1. 只有在聚合内部有唯一的本地标识
  2. 所有属性都是可变的。
  3. 实体的生命周期从属于聚合根,由聚合根维护

根的引用规则:

  1. 根到根:通过ID关联
  2. 根到内部实体:直接对象应用
  3. 根到值对象:直接对象引用

实体的引用规则:

  1. 可以直接引用聚合内的根、实体、值对象
  2. 能引用外部根,但要以ID的方式关联,如果要关联其他聚合的实体,则要先聚合根ID再到实体的原则

值对象的引用规则:

  1. 只需确保值对象是只读的即可
  2. 推荐值对象的所有属性都尽量是值对象;
时间: 2024-12-23 05:30:10

聚合的划分(二)---再次总结的相关文章

软件测试之等价划分二

上周通过测试用例实现等价划分,这次需要三个输入框同时输入.其实只是增加了测试的次数. 这次我用java的程序测试. 首先是无输入: 会提示你输入字符必须是1-6. 测试1: 字符一: 121221f 字符二: jjhj12 字符三: dsd1&& 测试结果如下: 测试2: 字符一: 1212fd 字符二: fdf123 字符三: Adf2d1 测试结果: java代码如下: package ceshi;import java.util.regex.Matcher;import java.u

递归---NYOJ-176 整数划分(二)和NYOJ-279队花的烦恼二

这道题目的递归思想和第一个题差不多, 主要思想是:func(n, m)的作用是将n划分为m个. 1. 如果n < m 的时候肯定是不能划分的,所以就返回0 2. 如果m = 1 或者 n = m 的时候,就一种划分方式 3. 如果n > m 的时候, 分为两种情况,一个是划分数中含有1, 一个是不含1, 所以含有1 的个数为func(n - 1, m - 1),意思就是从n去掉1,然后再划分m - 1个, 下面就是不含1的, func(n - m, m), 这个式子的意思为, 先取出m个1来,

NOSQL(二)聚合数据模型

<NoSQL精粹>读书笔记,转载请注明出处<jiq?钦's technical Blog> 一.NoSQL的数据模型 关系型数据库的数据模型是"关系"和"元组",一个关系对应一张表,而一个元组对应一行,其中元组由一系列的值组成,不能嵌套. NoSQL数据库最大的转变就是抛弃了关系模型.但是每种NoSQL解决方案模型都不同,大体上可以将NoSQL数据模型分为四类:"键值"."文档"."列族&qu

C#进阶系列——DDD领域驱动设计初探(二):仓储Repository(上)

前言:上篇介绍了DDD设计Demo里面的聚合划分以及实体和聚合根的设计,这章继续来说说DDD里面最具争议的话题之一的仓储Repository,为什么Repository会有这么大的争议,博主认为主要原因无非以下两点:一是Repository的真实意图没有理解清楚,导致设计的紊乱,随着项目的横向和纵向扩展,到最后越来越难维护:二是赶时髦的为了“模式”而“模式”,仓储并非适用于所有项目,这就像没有任何一种架构能解决所有的设计难题一样.本篇通过这个设计的Demo来谈谈博主对仓储的理解,有不对的地方还望

基于Spark GraphX计算二度关系

关系计算问题描述 二度关系是指用户与用户通过关注者为桥梁发现到的关注者之间的关系.目前微博通过二度关系实现了潜在用户的推荐.用户的一度关系包含了关注.好友两种类型,二度关系则得到关注的关注.关注的好友.好友的关注.好友的好友四种类型. 如果要为全站亿级用户根据二度关系和四种桥梁类型推荐桥梁权重最高 TopN 个用户,大致估算了下总关系量在千亿级别,按照原有的 Mapreduce 模式计算整个二度关系,需要以桥梁用户为 Key,把它的关注和粉丝两个亿级的表做 Join,如果活跃用户按照亿计,平均关

DDD领域驱动设计初探(一):聚合

前言:又有差不多半个月没写点什么了,感觉这样很对不起自己似的.今天看到一篇博文里面写道:越是忙人越有时间写博客.呵呵,似乎有点道理,博主为了证明自己也是忙人,这不就来学习下DDD这么一个听上去高大上的东西.前面介绍了下MEF和AOP的相关知识,后面打算分享Automapper.仓储模式.WCF等东西的,可是每次准备动手写点什么的时候,就被要写的Demo难住了,比如仓储模式,使用过它的朋友应该知道,如果你的项目不是按照DDD的架构而引入仓储的设计,那么会让它变得很“鸡肋”,用不好就会十分痛苦,之前

NYOJ-571 整数划分(三)

此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重要的一步,如果找不准边界,这个题也很难做出来,当时我就是找边界找了好长时间,边界得琢磨琢磨.递推步骤如下: 第一行:将n划分成若干正整数之和的划分数.状态转移方程:dp[i][j]:和为i.最大数不超过j的拆分数dp[i][j]可以分为两种情况:1.拆分项至少有一个j 2.拆分项一个j也没有dp[i

理解 JMeter 聚合报告(Aggregate Report)

Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Report中,会显示一行数据,共有10个字段,含义分别如下. Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值 #Sam

KeyMob:为国内应用开发者管理的广告聚合平台

应用开发者在应用中嵌入广告SDK的来源主要包括两种:使用移动广告平台与移动广告聚合平台.国内有多少家提供移动广告管理的平台?据统计,这两个版本,已经有四五十家.虽然这两个版本存在着不同的差异,但很多开发者反映的问题都是一致的;开发者面临着如此之多的广告平台,往往会陷入很难抉择与迷茫,不知选择哪个平台比较好. 而作为移动广告聚合平台的KeyMob,则定位于为开发者服务,目前也逐步拓展为广告投放者提供服务:一是为了开发者提供移动广告聚合平台,二是为了通过获取一些品牌的广告主资源,帮助开发者实现自主销