• 领域驱动设计


    1.分层结构

      Interfaces:接口层
        该层包含与其他系统交互的所有内容,例如web服务,rmi服务。
        对传入的数据进行解释、验证和转换
        对传出的数据就行转换,序列化等
      Application:应用层
        应用层负责驱动应用程序的工作流程,匹配用例
        其操作是独立于接口的,可以是同步调用,或者消息驱动
        适合做跨越事物、高级别的日志记录
        应用层很薄,只是用来协调领域层对象以执行实际工作
      Domain:领域层
        领域是软件的核心(业务逻辑的核心),主要是业务逻辑的封装
        每个聚合有一个包(聚合可以理解为某一个独立业务,具体依赖建模方式)
        每个聚合下面包含实体类,值对象,域事件,存储库接口,工厂
      Infrastructure:基础设施层
        上面上个是垂直层,基础设施同时为上面三层提供服务,促进层之间的沟通
        包含独立于应用程序的所有内容:外部库,数据局引擎,数据传递后端。举例:
        不依赖与具体的持久化方案与实现,不依赖于消息队列的具体选型
        这里提供实现,上面其它层定义接口
        简言之:对于外部的依赖在这里封装,其它层无需感知具体选型与实现
        去除(mock)基础设施层的代码,应该依然可以进行单元测试,而且业务逻辑整体可以跑通

    2.基本概念

      entity:实体
        有明确的身份(id),有状态转换周期(数据改变),一般需要持久化
      value object:值对象
        没有明确的身份(id),没有状态转换,不可变对象
      domain event:域事件
        有身份(id),没有生命周期(数据不可变),是实体和值对象的混合体
      aggregates:聚合
        聚合一般使用一个聚合根对象实现
        聚合根通过设置实体之间的关系规则来帮助解耦大型结构
        聚合根也可以具有不适合单个类的属性,方法和变量
        一般一个或多个模型中需要提炼一个聚合根,这样外界只需和聚合根打交道
      Repositories:存储库(可以理解为一个dao层接口)
        存储库工作在聚合跟之上,每个聚合根对应一个存储库
        存储库用于保存聚合根对象(一般是实体类)
        存储库接口属于领域层,实现属于基础设施层
      Domain Services:领域服务
        领域服务以域类型的形式表示
        领域服务的方法参数和返回值是领域模型对象
        领域服务的接口定义属于领域层,实现属于基础设施层或者领域层(根据相关度而言)
      Application Services:应用服务
        对领域层的工作流控制,简言之,就是根据业务拼装参数,组合调用多个底层服务。

    3.包结构

    Interfaces
      Facade
      DTO
      Assembler
    Application
      Service
    Domain
      module
      service
      shared
    Infrastructure

    4.图解

     

    备注

    官方示例代码:

      https://github.com/citerus/dddsample-core

    官方概念解读:

      http://dddsample.sourceforge.net/characterization.html

  • 相关阅读:
    PHP笔试题
    找工作的几种方式
    ThinkPHP3.2.3学习笔记5---模板(一)
    PHP7新特性
    了解Web Uploader
    什么是云购网
    使用PDO操作数据库的好处
    MySQL与MongoDB的区别
    显示和编辑注解
    自定义验证逻辑
  • 原文地址:https://www.cnblogs.com/gc65/p/11331925.html
Copyright © 2020-2023  润新知