使用领域驱动设计心得(2)
使用领域驱动设计心得(2)
zhuzhuguang 发表于3年前
使用领域驱动设计心得(2)
  • 发表于 3年前
  • 阅读 43
  • 收藏 1
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

摘要: 聚合、事件驱动的开发

关于聚合

聚合从业务意义上讲,就是一组实体和值对象,其中有一个根实体,访问其他的实体和值对象只能通过根实体。从关系上讲,其他的实体和值对象围绕根实体,附属于根实体,聚合外的其他聚合和实体,不能直接和非根实体通信。如汽车、车门、轮胎就构成一个聚合,其中汽车是根实体,车门和轮胎都是值对象,车门和轮胎不能抛弃汽车主体单独和其他聚合通信。

聚合从技术意义上讲,他是一个事务单元,也就是聚合内部的实体和值对象,要同时产生,同时回滚。

因此在设计一个聚合的时候,要特别考虑聚合的技术意义,因为很多模型看似是一个聚合,但是并不能同时提交,这时设计成多个聚合更好。比如个人信息中,教育背景、工作背景,如果认为是个人信息聚合下的2个实体,那么在进行持久化操作的时候就必须在一个事务下,这样会导致工作背景出错,教育背景也需要重新保存,如果认为2者可以单独保存的话,设计成2个聚合更合适。

聚合之间的通信或者多个聚合相继持久化,最好为异步完成,多个聚合多个事务。


关于事件驱动开发

事件驱动开发往往和领域驱动一起使用,但是领域驱动设计不一定是事件驱动的。在领域驱动中,一个操作需要多个聚合完成时,使用事件驱动比较合适。第一个聚合完成任务后,发布领域事件,其他聚合可以监听这个领域事件,事件发生时,通知所有监听的聚合,这是一种典型的观察者模式。其他聚合完成时,再发布自己的事件,这样形成一个事件链。

事件驱动的好处是,非常的松耦合,可同步、可异步,同步事件可以使用普通的程序完成,异步事件可以使用消息服务。聚合之间可以发布异步事件。缺点是有时差,并且整个系统会变得稍复杂。

共有 人打赏支持
粉丝 3
博文 24
码字总数 6185
×
zhuzhuguang
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: