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

领域驱动设计简介

领域驱动设计(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. 元素之间的关系

未完待续

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容