领域驱动设计笔记(1)

什么是领域驱动设计?
    *DDD是一套综合软件系统分析和设计的面向对象建模方法
    *DDD是一种处理高度复杂领域设计的思想,他将技术与业务分离,以业务概念来建立领域模型,用领域模型来
     控制业务的复杂性,解决软件难理解、难演进的问题。
    *DDD不是一种架构,只是一种架构设计的方法论,它通过业务边界划分,把复杂业务领域问题简单化。通过
     清晰的边界划分,让微服务的架构演进不在那么困难
    *DDD包括战略设计和战术设计两部分
     战略设计:从业务视角出发,划分业务的领域边界,建立基于通用语言和业务上下文语义边界的界限上下文
     ,构建领域模型。
     战术设计:则是从技术角度出发,侧重于对领域模型的技术实现,按照领域模型完成微服务的开发和落地     
一些重要的概念
   领域:在汉语词典中的解释是“领域是从事一种专门活动或事业的范围、部类或部门”,
     百度百科中的解释是"领域具体指一种特定的范围或区域“。领域主要是用来确定范围的,范围即边界。
     
     子域:在某个大领域被细分后分为不同的子域,如:桃树被划分后形成根、茎、叶、花、果、实不同的
     。子域根据功能需求不同又分为核心子域、通用子域、支撑子域
     
     核心子域:在子域中根据重要程度,重要的,具有核心竞争力的子域
     
     通用子域:在子域里没有个性化的诉求,同时又被多个子域共同使用
     
     支撑子域:不具核心竞争力,也不被多个子域共同应用
     
     通用语言:通用语言是团队的统一语言,不管你在团队中担任什么角色,在同一个领域的软件生命周期里
     都使用统一的语言进行交流。通用语言采用领域内的语言,不要使用技术语言,通用语言具有简单、清晰
     、准确地描述业务含义和规则的特点。团队中所有的交流都应该以通用语言进行。
     
      限界上下文:用于定义领域边界,确保每个上下文对象在它特定的边界内具有唯一的含义,在这个边界
      内组合这些对象构成领域模型。如:“能穿多少穿多少”将这段话放在冬天和夏天是不一样的,引入限界
      上下文就可以将这句话理解清楚。限界上下文用来封装通用语言和领域对象,保证领域内的一些术语。
      领域对象等有一个确切的含义,没有二义性的一个业务边界。在定义限界上下文时以单一职责为出发点。
      
      实体:实体具有在领域模型中它拥有唯一的标识符,不论经过多种状态变更后都保存一致。为实体来说
      重要的不是属性,而是其连续性和标识,这种连续性和标识甚至超出软件生命周期。
      
      值对象:是通过属性来识别的对象,他将多个属性组织为一个概念集合,用于描述领域的某个特定方面
      ,并且是一个没有标识的对象。特点,是一个属性集合,通过属性来识别没有唯一的标识符,是若干基
      于描述目的,具有整体概念和不可修改的属性。如:人员信息中地址属性,由于地址中包括了省、市、
      县、街道等信息,在人员信息中地址就是某个街道,以地址中的街道来识别。个人理解,值对象也可以
      认为是数据库中的外键关联的表属性,在主表中只关心这个字段的值,或者一些枚举类型。
      实体和值对象比较:实体和值对象的目的都是抽象聚合若干属性以简化设计和沟通,两者都是经过属性
      聚类形成的。    
      实体在领域内有唯一的标识,而且这个标识经过属性的多次变更后都不变更。实体的生命周期甚至超过
      软件的生命周期。值对象在领域内是以属性来识别的,不具备唯一的标识,对属性的变化很敏感,属性
      变了就不在时原来的那个他了。
      实体和值对象是基础的领域对象,实体一帮对应业务对象,它具有相对丰富的业务属性和业务属性和业
      务行为,而值对象主要是属性集合,主要完成对实体的状态和特征描述。
      
      聚合:在领域模型中,实体和值对象是个体化的业务对象,它表现出来的是个体行为和能力。如社会是
      由一个个人组成的,象征着我们每一个人。随着社会的发展慢慢就出现了社团、机构、部门等组织,个
      人可以加入这些组织,于是我们就从个人编程了组织的一员,大家在组织内按照组织的章程和目标,协
      同一致的工作,进而发挥出更大的价值。在这个例子中,个人就好比实体和值对象,而组织就是一个聚
      合。
            因此聚合有如下特点
            1.由实体和值对象组成
            2.在聚合内每个实体和值对象需要遵守这个聚合内的的规则工作
            3.聚合内的实体和值对象对外提供协同一致的接口
            
      聚合根:在聚合中有多个实体和值对象,而在这些实体中,可以管理所有聚合内的实体和值对象的实体
      就是聚合根。聚合根可以创建和销毁其他实体或值对象。同时也是聚合中对外提供链路人和接口人。就
      好比一个组织或部门的领导,在部门对外提供服务时,其他部门不会直接找到其他部门的某个人,而是
      找到该部门的领导,然后在由部门领导分配任务。
      
      贫血领域模型:领域对象大多只有get和set方法,业务逻辑统一放在了业务逻辑层实现,而不是在领域
      对象中实现,就类似于mvc架构中,实体对象的定义就是属性和get,set方法,而所有的业务逻辑都放到
      了service层中实现。
      
      充血领域模型:业务逻辑都在领域实体对象中实现,实体本身不仅包含了属性,还包含了该实体的业务
      逻辑行为。我们在做设计时要按充血模型去设计实体,要不就成了传统的三层架构,和DDD就没有任何关
      系了。
      
      命令:命令一般是由当个实体或值对象,在一个聚合内完成的业务逻辑,不需要其他的聚合根参与。
      
      领域服务:在一个子域内,存在多个聚合根,而某个业务逻辑需要调动多个聚合根实体协作一起才能完
      成,而这个业务逻辑放到其中任何一个聚合根下都太适合,那么就可以放到领域服务内。
      
      领域事件:领域事件是领域模型非常重要的以部分,用于表示领域中发生的事件。一个领域事件往往会
      导致进一步的业务操作,它在实现领域模型解耦的同时,还有助于形成完整的业务操作闭环。
      
      应用服务:领域服务是有多个聚合根协同才能完成的操作,而领域服务则是由多个领域协同才能完成的
      操作,叫做应用服务。     

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值