美文网首页领域模型
领域驱动设计DDD入门(一)

领域驱动设计DDD入门(一)

作者: 碧鬼鸠 | 来源:发表于2018-08-29 09:12 被阅读48次

    领域驱动设计简介

    领域驱动设计(Domain-Driven Design)简称DDD。

    目录

    • DDD是什么?
    • DDD和已有方法的区别是什么?
    • DDD有什么特点?
    • DDD应该怎么做?
    • DDD如何开始?

    DDD是什么?

    DDD是由 Eric Evans 提出的,综合软件系统分析和设计的面向对象建模方法。如今已经发展成为了一种针对大型复杂系统的领域建模与析方法。
    DDD是针对软件开发领域的一种系统与理论分析方法,是一种方法论。

    DDD和已有方法的区别是什么?

    传统方法:

    • 是针对数据库建模,是关系型数据库理论的延续,关注数据表和数据表之间的关系,是面向技术建模。

    DDD:

    • 将业务概念和规则转变为软件系统中的类型及其属性和行为
    • 合理利用面向对象的封装、继承、多态等设计要素
    • 降低或隐藏系统的业务复杂度
    • 提升系统扩展性

    DDD有什么特点

    • 建立了==以领域为核心驱动力==的设计体系
    • 不是架构方法,不是设计模式
    • 是一种思维方式。是一种优先任务,加速复杂领域的软件开发

    DDD怎么做

    1. 强调领域模型的重要性
      通过模型驱动设计来保证领域模型和程序设计一致
    2. 从业务需求提炼统一语言
      基于统一语言建立领域模型
      领域模型指导程序设计及编码
    3. 通过重构发现隐式概念
      用设计模式改进设计与开放质量

    DDD战略设计

    1. 问题域
      • 分解问题域。包括限界上下文和上下文映射。
      • 识别核心领域和子领域
    2. 架构
      • 分层架构
      • 六边形架构
      • CQRS模式

    DDD相关概念

    领域(Domain):

    现实世界中,领域包含了问题域和解系统。一般认为软件是对现实世界的部分模拟。在DDD中,解系统可以映射为一个个限界上下文,限界上下文就是软件对于问题域的一个特定的、有限的解决方案。

    界限上下文(Bounded Context):

    一个由显示边界限定的特定职责。领域模型便存在于这个边界之内。在边界内,每一个模型概念,包括它的属性和操作,都具有特殊的含义。

    限界上下文之间的映射关系

    • 合作关系(Partnership):两个上下文紧密合作的关系,一荣俱荣,一损俱损。
    • 共享内核(Shared Kernel):两个上下文依赖部分共享的模型。
    • 客户方-供应方开发(Customer-Supplier Development):上下文之间有组织的上下游依赖。
    • 遵奉者(Conformist):下游上下文只能盲目依赖上游上下文。
    • 防腐层(Anticorruption Layer):一个上下文通过一些适配和转换与另一个上下文交互。亦称适配层。在一个上下文中,有时需要对外部上下文进行访问,通常会引入防腐层的概念来对外部上下文的访问进行一次转义。
    • 开放主机服务(Open Host Service):定义一种协议来让其他上下文来对本上下文进行访问。
    • 发布语言(Published Language):通常与OHS一起使用,用于定义开放主机的协议。
    • 大泥球(Big Ball of Mud):混杂在一起的上下文关系,边界不清晰。
    • 另谋他路(SeparateWay):两个完全没有任何联系的上下文。

    领域模型(Domain Model):

    领域通用语言(UBIQUITOUS LANGUAGE):

    DDD战术设计

    1. 表示模型的元素
      • 值对象(Value Object):当一个对象用于对事务进行描述而没有唯一标识时,它被称作值对象(Value Object)。它具有不变性、相等性和可替换性。
      • 实体(Entity):当一个对象由其标识(而不是属性)区分时,这种对象称为实体(Entity)。
      • 领域服务(Domain Service):一些重要的领域行为或操作,可以归类为领域服务。它既不是实体,也不是值对象的范畴。领域服务本身所承载的职责是通过串联领域对象、资源库和防腐层等一系列领域内的对象的行为,对其他上下文提供交互的接口。
      • 领域事件:领域事件是对领域内发生的活动进行的建模。
      • 资源库:领域对象需要资源存储,存储的手段可以是多样化的,常见的无非是数据库,分布式缓存,本地缓存等。资源库(Repository)的作用,就是对领域的存储和访问进行统一管理的对象。
      • 工厂
      • 聚合(Aggregate):聚合是一组相关对象的集合,作为一个整体被外界访问,聚合根(Aggregate Root)是这个聚合的根节点。聚合由根实体,值对象和实体组成。核心领域往往都需要用聚合来表达。
      • 应用服务
    2. 元素之间的关系

    未完待续

    相关文章

      网友评论

        本文标题:领域驱动设计DDD入门(一)

        本文链接:https://www.haomeiwen.com/subject/deqhwftx.html