508 次浏览
  • 一、领域驱动设计DDD(Domain Driven Design)
    • 名词定义
      • 战略建模
        • 战略和战术是站在DDD角度进行的划分:
          • 战略设计:侧重于高层次、宏观上去划分和集成限界上下文
          • 战术设计:更关注具体使用建模工具来细化上下文。
      • 领域
        • 现实世界中领域包含了问题域和解系统
          • 解系统:可以映射为一个个限界上下文
            • 限界上下文:软件对于问题域的一个特有的、有限的解决方案。
            • 一个给定的业务领域会包含多个限界上下文,想与一个限界上下文沟通需要通过显示边界进行。
            • 系统通过确定限界上下文进行解耦
      • 划分限界上下文:
        • 不应该按照技术架构或者开发任务来划分
        • 应该按照语义边界来考虑,从需求出发,按领域划分
        • 从两个方向划分:
          • 纵向:识别事件流中的事件,倘若两个事件之间的关系较弱,或体现了非常明显的阶段,就可以对其进行分隔。
          • 横向:梳理所有事件,根据组成事件的名词和动词去发现事件之间的相关性(相同、相似的名称)然后去提炼一个整体的概念
        • 识别限界上下文遵循的原则
          • 单一抽象:每个限界上下文从概念上应处于同一抽象层次,不能嵌套
          • 正交原则:限界上下文直接不能互相影响,相互包含。
      • 上下文映射图
        • 作用: 进一步梳理上下文之间关系
        • 映射关系:
          1. 合作关系Partnership:两个上下文紧密合作,一荣俱荣,一损俱损。
          2. 共享内核SharedKernel:两个上下文依赖部分共享的模型
          3. 客户方-供应方Customer-Supplier Development:上下文之间有组织的上下游依赖
          4. 遵奉者Conformist:下游下文只能盲目依赖上游上下文
          5. 防腐层Anticorruption Layer:上下文通过一些适配和转换和另一个上下文交互
          6. 开放主机服务Open Host Service:定义一种协议让其他上下文对本上下文进行访问
          7. 发布语言Published language:通常与OHS一起使用,用于定义开放主机的协议
          8. 大泥球Big Ball of Mud :混杂在一起的上下文关系,边界不清晰
          9. 另谋他路SeparateWay:两个没有任何完全联系的上下文。
        • 上下文映射关系明确限制了限界上下文的耦合性,耦合度限定在数据耦合Data Coupling的层级
        • 识别上下文映射:
          • 通过事件风暴:
            1. 识别跨限界上下文之间相邻事件的关系
            2. 事件之间是否存在直接触发的关系(参与者为前置条件),需要确定这两个事件所属的限界上下文
            3. 判断这两个事件所属的限界上下文,谁时主要的,主要的BC就是下游
      • 战术建模——细化上下文
        • 实体:当一个对象由其标识(而不是属性)区分时,这种对象称为实体
        • 值对象:当一个对象用于事务描述而没有唯一标识时,被称作值对象Value Object
        • 聚合根
          • Aggregate聚合是一组相关对象的组合,作为一个整体被外界访问, 聚合根Aggregate是这个聚合的根节点
          • 聚合可指导详细设计
          • 由根实体,值对象和实体组成
          • 如何创建好的聚合
            1. 边界内的内容具有一致性:在一个事务中只修改一个聚合实例。
            2. 设计小聚合:大部分聚合都可以只包含根实体,而无需包含其他实体,即使一定要包含,可以考虑将其创建为值对象。
            3. 通过唯一标识来引用其他聚合或实体:当存在对象间的关联时,建议引用其唯一标识或将需要的属性构造值对象,如果聚合创建复杂,使用工厂方法屏蔽内部复杂的创建逻辑。
        • 领域服务:一些重要的领域行为或者操作,可以归类为领域服务,它既不是实体,也不是值对象的范畴
        • 领域事件:是对领域内发生的活动进行的建模
    • 全过程 
    • 设计领域模型的一般步骤:
      1. 根据需求,划分初步的领域和界限上下文,以及上下文之间的关系。
      2. 进一步分析上下文内部,识别哪些是实体,哪些是值对象。
      3. 对实体、值对象进行关联和聚合,划分出聚合的范畴和聚合根。
      4. 为聚合根设计仓储,思考实体或者值对象的创建方式。
      5. 在工程中实践领域模型,在实践中检验模型合理性,倒退模型不足的地方并重构。
  • 二、全局分析阶段
    1. 价值需求分析——商业画布
    2. 业务需求分析——事件风暴
      • 第一步,识别事件
        • 事件:
          • 是过去发生的与业务有关的事实
          • 具有时间点的特征,所有事件连接起来会形成明显的时间轴
          • 是管理者和运营者 重点关心的内容,若缺少该事件会对管理和运营产生影响
          • 会导致目标对象状态的变化 
          • 注:事件命名统一如,n + v-ed
        • 标记热点:
          • 识别事件的过程中,如果出现以下情况可标记为热点:
            • 暂不考虑的事件流分支
            • 出现分歧和争执的事件
            • 需要强调的事件或事件对应的领域逻辑
        • 识别出第一个事件后,按照事件的前因后果驱动以时间为轴列出所有事件
      • 第二步,识别参与者
        • 事件一共有四种参与者
          • 角色(Role):触发事件的人
          • 策略(Policy):触发事件的规则//策略包含规则,可认为策略是规则+定时器的组合
          • 外部系统(External System)
          • 事件(Event):即当前事件的前置事件
    3. 业需分析——领域和子领域
      • 根据业务价值划分子领域
        • 领域划分为
          • 核心子领域
          • 通用子领域
          • 支撑子领域
        • 划分策略:
          • 按相关职能部门
          • 产品方向
          • 划分核心业务流程的环节
          • 业务概念

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注