DDD领域开发的基本概念


一、DDD是什么?

开发程序应该“自顶而下、逐步求精”。也就是说,不要求一步就编写出可执行的程序,我们可以面向问题的总体目标,抽象低层的细节,先构造程序的高层结构,然后再一层一层地向下分解和细化,最后一步编写出来的程序才是可执行程序。

DDD是一种面向对象分析(Object-Oriented Analysis,OOA)与设计的方法论,可以很好地与现代的面向对象的程序设计(Object-OrientedProgramming,OOP)方法相结合,实现软件的编程方法会反过来影响分析方法。

解决核心复杂性的关键还是在于切分(分而治之),也就是说希望可以缩减每次要解决的领域问题的范围,简化概念和概念之间的关系。

二、重要概念

实体有一类对象拥有标识符(简称ID),不管对象的状态如何变化,它的ID总是不变的,这样的对象称为实体。

没有标识符的对象,叫作值对象。·推荐将值对象实现为“不可变的”(Immutable)。也就是说,值对象由一个构造器创建,并且在它们的生命周期内永远不会被修改。实现为不可变的,并且不具有标识符后,值对象就能够被安全地共享,并且能维持一致性。

聚合在对象之间,特别是实体与实体之间划出边界。聚合内的实体分为两种:聚合根(Aggregate Root)与聚合内部实体(或者非聚合根实体)。

聚合:访问控制+同生命周期+状态变化同步
一个聚合只能包含一个聚合根。当客户端需要访问一个聚合内部实体的状态时,最先能得到的只有聚合根,然后通过这个聚合根,才能进一步访问到聚合内的其他实体。

聚合内部实体的生命周期由它们所属的聚合根控制。如果聚合根不存在,那么在它控制下的聚合内部实体也就不存在了。
对于一个聚合内的对象状态(数据)的修改,我们需要保证它们总是一致的,也就是说我们要实现它们的强一致性。(某个瞬间不一致也不行)(聚合内强一致,聚合外最终一致)
很多时候,一个聚合内只有聚合根这一个实体。

非聚合根实体ID=聚合根ID+局部ID

分布式系统设计原则的第一条:不要“分布”。确切地说,如果没有足够的理由就不要做分布式设计,开发和运维分布式系统往往需要更高的成本。

跨聚合操作,定义为服务,以两个不同的聚合为参数
系统中有一些行为是不适合“归属于”哪个对象的,DDD建议把这样的行为定义为服务(Service)。或者说,当有一个操作需要修改多个聚合实例的状态时,这个操作就很有可能应该被定义为服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值