Neo Anderson's Blog

领域驱动设计的基本概念 - Domain Driven Design

字数统计: 886阅读时长: 3 min
2018/11/29
loading

常用名字解释:

  • 服务自治
  • 方法集成
  • 领域
  • 子域
  • 核心域
  • 界限上下文
  • 通用语言
  • 战术设计
  • 战略设计
  • 模型分离
  • 上下文映射图
  • 架构
  • 实体
  • 值对象
  • 领域服务
  • 领域事件
  • 模块
  • 聚合
  • 工厂
  • 资源库
  • 集成界限上下文
  • 优劣性
  • 大泥球架构(Big Ball of Mud)
  • 六边形架构(Hexagonal Architecture)
  • 核心域(Core Domain)
  • 支持子域(supporting SubDomain)
  • 贫血领域对象(Anemic Domain Object)
  • 对象-关系阻抗失配(Object-Relational Impedance)
  • 限界上下文(Bounded Context)

DDD 总览

  • 一个新的限界上线文或者上下文映射图可能需要一种新的架构.

  • 通过战略设计(决策分配人员)和战术设计(决策DDD模型部件)而成的领域模型应该是架构中立的.

  • 怎么做
    1, 有开发卓越软件的激情和毅力
    2, 渴望学习和进步
    3, 有理解软件模式,并懂得如何应用这些模式
    4, 有发掘不同设计方法的能力和耐性
    5, 勇于改变现状
    6, 看重细节,希望亲自实验.
    7, 希望编写更好的代码

  • DDD的实施,最好将那些不怎么使用技术语言的人加入到自己的团队,相互学习;

  • 领域专家关注交付业务价值, 开发者关注技术实现

  • DDD本身是一种软件开发方法, 关注点如下:
    1, DDD关注实用性, 通过DDD可以让开发的软件能够反映出领域专家的思维模型
    2, DDD关注业务战略.战略设计通常包含战术设计,但战略设计更多关注业务战略方向;
    3, 使用战术设计建模工具, DDD满足了软件真正的技术需求;

  • DDD决策使用记分卡:
    1, 系统中存在30+ 个用户故事或者用例流, 可采用DDD;
    2, 软件走向模糊, 复杂度可能更加复杂. 需和领域专家一起讨论复杂性. 如果趋向于复杂功能实现,就可采用DDD;

  • 贫血症和失忆症:
    1,贫血症表象:
    - 领域对象主要只包含getter 和setter方法, 几乎没有业务逻辑或者完全没有业务逻辑

  • 如何DDD:
    1, 通用语言的掌握识别方式:
    - 同时绘制物理模型和概念模型,并标以名字和行为;
    - 创建一个包含简单定义的术语表;所有想到的都罗列出来.
    - 如果术语表感觉不喜欢,可以采用其他类型的文档;
    - 统一团队中不同人的使用分歧;

  • DDD带来的业务价值

    • 你获得一个非常有用的领域模型
    • 你的业务得到了跟更准确的定义和理解
    • 领域专家可以为软件设计作出贡献
    • 更好的用户体验
    • 清晰地模型边界
    • 更好的企业架构
    • 敏捷,迭代式和持续建模
    • 使用战略和战术新工具

领域,子域,限界上下文

  • 领域?: 领域是一个包含众多含义的词, 领域既可以表示整个业务系统,也可以表示其中的某个核心域或者支撑子域;
  • 术语?:
    1, ‘顾客’:
    -浏览商品目录,顾客表示放在先前购买情况,忠诚度,可买产品折扣和物流方式等 上下文中;
    -下单时,顾客表示名字,产品寄送地址, 订单总价, 和一些付款术语
CATALOG
  1. 1. 常用名字解释:
  2. 2. DDD 总览
  3. 3. 领域,子域,限界上下文