读书笔记
Domain-Driven Design/领域驱动设计
  作者：Eric Evans
  Domain-Driven Design – Tackling Complexity in the Heart of Software
领域驱动设计 - 解决软件核心的复杂性
    作者：Eric Evans
    阶段一
      通用语言
      领域概念
      领域模型
    阶段二
      领域模型驱动软件设计
    领域驱动设计的核心是建立正确的领域模型
  1.领域模型
    是对具有某个边界的领域的一个抽象，反映了领域内用户业务需求的本质
      是有边界的
    只反映业务
      实体概念
      过程概念
    业务逻辑都在一个模型中，都在一个地方
      高内聚
    相对平滑地将领域知识转化为软件构造
    贯穿软件分析、设计，以及开发的整个过程
    要建立正确的领域模型并不简单
      对领域的认识不断深入，从而不断细化和完善领域模型
    领域模型表示法
      图
      文字描述
    领域模型是整个软件的核心
      设计足够精良且符合业务需求的领域模型
  3.领域建模时思考问题的角度
    建立领域模型时也要将用户置于模型之外
    根据用户需求挖掘出领域内的相关事物，思考这些事物的本质关联及其变化规律作为出发点去思考问题
    领域模型是排除了人之外的客观世界模型
    领域模型是与谁用和怎样用都无关的客观模型
  2.领域通用语言
    一个核心的原则是使用一种基于模型的语言
    模型是软件满足领域的共同点
  4.经典分层架构
    用户界面/展现层
    应用层
    领域层
    基础设施层
  模式
    对象之间的关联该如何设计
      原则
        关联尽量少
        一对多的关联
        尽量保持单向的关联
        关联的限制条件
    实体(Entity)
      实体就是领域中需要唯一标识的领域概念
      实体有生命周期
    值对象(Value Object)
      如果两个对象的所有属性的值都相同我们会认为它们是同一个对象的话，就可以把这种对象设计为值对象
      值对象没有唯一标识，和实体的最大不同
    领域服务(Domain Service)
      领域服务用来对应这种跨多个对象的操作
      只有行为，没有状态，是无状态的
      存在的意义就是协调领域对象共同完成某个操作
      模型(实体)与服务(场景)是对领域的一种划分，模型关注领域的个体行为，场景关注领域的群体行为，模型关注领域的静态结构，场景关注领域的动态功能
      可以避免领域逻辑泄露到应用层
    聚合及聚合根(Aggregate, Aggregate Root)
      聚合，通过定义对象之间清晰的所属关系和边界来实现领域模型的内聚
      聚合定义了一组具有内聚关系的相关对象的集合，一个修改数据的单元
    工厂(Factory)
      引入工厂模式的原因是：有时创建一个领域对象是一件比较复杂的事情
    仓储(Repository)
      提供管理对象的接口
      仓储里面存放的对象一定是聚合
      仓储定义部分和仓储实现部分