领域模型、公共语言、结构化设计

重视业务逻辑
提供灵活性和扩展性

决定软件复杂性的是设计方法

两个实践

1、迭代开发 — ‘敏捷开发’的基础
2、开发人员与领域专家具有密切的关系

领域驱动设计的本质:消化吸收大量知识,最后产生一个反应深层次领域知识并聚焦于关键概念的模型

敏捷过程强调应对变更和不确定性的能力
极限编程承认设计决策的重要性,但强烈反对预先设计

主要内容

1、运用领域模型
2、模型驱动设计的构造块
3、通过重构来加深理解
4、战略设计

上下文、提炼、大型结构

运用领域模型

地图即模型,模型被用来描绘人们所关注的显示或想法的某个方面。
模型是一种简化,是对现实的解释 —— 把与解决问题密切相关的方面抽象出来,而忽略无关的细节

  • 3个基本用途决定模型的设计

    1、模型和设计的核心互相影响
    2、模型是团队所有成员使用的通用语言的中枢
    3、模型是浓缩的知识

消化知识

  • 有效建模的要素

    1、模型和实现的绑定
    2、建立一个基于模型的语言
    3、开发一个蕴含丰富知识的模型
    4、提炼模型
    5、头脑风暴

交流与语言的使用

  • UBIQUITOUS LANGUAGE

    通用语言的词汇包括类和主要操作的名称

绑定模型和实现

两个基本要素(即模型要支持有效的实现并抽象出关键的领域知识)
整体设计的有效性有几个非常敏感的影响因素——那就是细粒度的设计和实现决策的质量和一致性
  • MODEL-DRIVEN DESIGN
  • HANDS-ON MODELER

模型驱动设计构造块

软件设计风格: “职责驱动设计”

分离领域

  • LAYERED ARCHITECTURE (分层架构)
  • 领域层是模型的精髓
  • THE SMART UI “反模式”

软件中表示的模型

表示模型的3种模型元素模式:ENTITY、VALUE OBJECT和SERVICE。

  • 关联

  • ENTITY(REFERENCEOBJECT)

  • VALUE OBJECT

  • SERVICE

    好的service 应该具有的特点:
    (1)与领域概念相关的操作不是ENTITY或VALUEOBJECT的一个自然组成部分。
    (2)接口是根据领域模型的其他元素定义的。
    (3)操作是无状态的。

  • MODULE(也称为PACKAGE)

领域对象的生命周期

主要挑战:
 1、在整个生命周期中维护完整性
 2、防止模型陷入管理生命周期复杂性造成的困境当中
  • 解决方案: 工厂来创建和重建复杂对象和聚合存储库提供检查和检索持久化对象并封装庞大基础设施

  • FACTORY

    每个创建方法都是原子的,并且要保证被创建对象或聚合的所有固定规则。FACTORY生成对象要处于一致的状态。
    应该被抽象为所需的类型,而不是所要创建的具体类。