领域模型

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

2018-08-29  本文已影响48人  碧鬼鸠

领域驱动设计简介

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

目录

DDD是什么?

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

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

传统方法:

DDD:

DDD有什么特点

DDD怎么做

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

DDD战略设计

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

DDD相关概念

领域(Domain):

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

界限上下文(Bounded Context):

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

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

领域模型(Domain Model):

领域通用语言(UBIQUITOUS LANGUAGE):

DDD战术设计

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

未完待续

上一篇 下一篇

猜你喜欢

热点阅读