文档章节

(一)什么是领域驱动设计

 细节探索者
发布于 09/12 01:03
字数 1665
阅读 15
收藏 0

什么是领域驱动设计

领域驱动设计是Eric Evans 定义的一种发展理念,

  • 软件中的复杂性:包含“某种程度上确实有用但无法解释如何运行但代码”。软件变得复杂及难以管理但一个主要原因在于,领域复杂性和技术复杂性混合在来一起。

复杂问题域产生的原因(泥球模式)

软件复杂性:偶发性技术复杂性和领域逻辑复杂性。

  • 1.未使用通用语言创建的代码:对于公共语言和问题域知识缺乏重视会导致代码库可用但无法揭示业务目的,这会使得代码库难以阅读和维护,因为分析模型与代码模型之间的转译将会代价高昂且容易出错。备注:分析模型:分析模型用于描述一个软件应用程序的逻辑设计与结构。它可以由示意图或使用UML这样的建模语言来表示。它是软件的一种表现形式,让非技术人员能够概念化以便理解软件是如何构造的。
  • 2.组织结构的缺乏:一个系统的最初体现是快速制作且通常能获得面面俱到的成功,但由于缺乏基于围绕问题域模型的应用程序设计的重视,后续的功能扩展就会变得很棘手。

泥球模式的危害

  • 1.泥球模式将扼杀开发:开发团队会不断抱怨在如此一团混乱的情况下难以开展工作。开发速度的增长水平也无法满足业务需求。
  • 2.缺乏对问题域的关注:当不能充分理解正在处理的业务领域时,软件项目就会失败。编码不应该是困难的哪一环,维持一个能够满足业务用例的有用软件模型才是难点所在。

什么是问题域

问题域涉及你当前正在构建软件的主题领域。DDD强调的是在致力于为大型复杂业务系统创建软件时专注领域要高于其他的一切的需求。

领域驱动设计模式如何管理复杂性

DDD 能同时应对理解问题域以及创建有助于解决其内在的问题的可维护解决方案的挑战。

DDD 的战略模式

  • 1.提炼问题域已揭示重要之处是什么。

    开发团队与领域专家会使用分析模式和知识处理来将大的问题域提炼成更具管理性的子域。核心领域是出于开发过程的产品背后的驱动力;它是构造产品的根本原因。

    探索核心领域有助于团队理解他们制作软件的原因以及软件对业务达成的成就意味着什么。对业务目标的鉴定将使得开发团队能够确定系统的重要部分并为之投入精力。随着业务的发展,软件也必须相应发展;它需要具备可修改能力,对应用程序关键区域的代码质量进行投入将有助于应用程序跟上业务的变化节奏。

  • 2.创建一个模型以解决领域问题 在解空间中,会为每一个子域构建一个软件模型以处理领域问题并让软件与业务保持一致。该模型并非现实世界的模型,而更多的是构建来满足业务用例需求的一个抽象体,同时仍保持业务领域的规则和逻辑。

  • 3.使用公共语言开启建模协作 模型使用公共语言构建(UML),以便快捷高效地将软件模型和概念分析模型连接在一起。编码时的术语会被映射到公共语言中,在业务分析时隐藏的概念也会被反馈到代码中。这正是领域专家和开发团队能够在协作中逐步发展模型的关键。

  • 4.将模型与歧义和损坏隔离 模型位于有界上下文内,定义了模型的适用性并确保保留其完整性。有界上下文用于形成一个围绕模型的防护边界,这是通过允许总体解决方案的不同模型在良好定义的业务上下文内部逐步发展来达成的,这样就不会带来对系统其他的负面连锁影响。

模型是与基础架构代码隔离的,以避免技术与业务概念融合的偶发复杂性。通过将模型完整性与第三方代码隔离,有界上下文还能阻止模型完整性被损坏。

  • 5.理解上下文之间的关系

DDD 理解确保团队和业务在独立模型和上下文如何共同工作以便解决跨越子域的领域问题方面要非常清楚的需求。

DDD的战术模式

DDD的战术模式是一个帮助创建用于复杂有界上下文的有效模型的模式集合。(企业应用架构模式 ,设计模式)

问题空间与解空间

领域驱动设计的实践与原则

  • 专注于核心领域
  • 通过协作进行学习
  • 通过探索和实验来创建模型
  • 通信
  • 理解模型的适用性
  • 让模型持续发展

领域驱动设计的常见误区

  • 战术模式是DDD的关键 对于开发人员来说,在开发人员不关心或不理解的领域方面,发现在代码中实现的DDD战术模式远比发现业务用户和团队之间的会话要容易多。这就是DDD会被误认为不过是由实体,值对象和存储库构成的一种模式语言。

  • DDD是一套框架

  • DDD是银弹

总结

不在与业务是否能够用到,关键是你是否具备某种能力。这个才是付费的标准。

© 著作权归作者所有

粉丝 24
博文 292
码字总数 362025
作品 0
杭州
程序员
私信 提问
[.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结

原文:[.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结 一、引用   其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计、领域...

杰克.陈
2017/12/05
0
0
【我们一起写框架】领域驱动设计的CodeFirst框架(一)—序篇

前言 领域驱动设计,其实已经是一个很古老的概念了,但它的复杂度依旧让学习的人头疼不已。 互联网关于领域驱动的文章有很多,每一篇写的都很好,理解领域驱动设计的人都看的懂。 不过,这些...

kiba518
2018/12/03
0
0
这就是领域驱动设计(DDD)的作用?

面对需求,我们首先想到的是什么 在家电IoT这个领域里,通常都会需要实现家电的分享。比如老婆分享家里的电饭煲给老公,让老公控制电饭煲。 拿到这样一个需求,通常大脑里想到的就是增加一张...

翟志军
2017/11/22
0
0
C#进阶系列——DDD领域驱动设计初探(一):聚合

原文:C#进阶系列——DDD领域驱动设计初探(一):聚合 前言:又有差不多半个月没写点什么了,感觉这样很对不起自己似的。今天看到一篇博文里面写道:越是忙人越有时间写博客。呵呵,似乎有点...

杰克.陈
2017/12/19
0
0
C#进阶系列——DDD领域驱动设计初探(四):WCF搭建

原文:C#进阶系列——DDD领域驱动设计初探(四):WCF搭建 前言:前面三篇分享了下DDD里面的两个主要特性:聚合和仓储。领域层的搭建基本完成,当然还涉及到领域事件和领域服务的部分,后面再...

杰克.陈
2017/12/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

还为PDF转Word抓狂?以下神器让你在职场倍受欢迎!

身在职场的你,是否一直在琢磨:如何能让自己在公司更受欢迎?如何才能在办公室里混个好人缘?如何在同事圈里留个好印象?其实,想要让自己成为受欢迎的人,只要让自己成为大家需要的人不就行...

foxit2world
4分钟前
0
0
AndServer+Service打造Android服务器实现so文件调用

so 文件调用 随着 Android 移动安全的高速发展,不管是为了执行效率还是程序的安全性等,关键代码下沉 native 层已成为基本操作。 native 层的开发就是通指的 JNI/NDK 开发,通过 JNI 可以实...

夜幕NightTeam
6分钟前
0
0
Docker下kafka学习三部曲之二:本地环境搭建

在上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来学习如何编写...

程序员欣宸
6分钟前
0
0
萌新推荐!不再为Excel转换PDF发愁,Aspose.Cells for .NET一步到位!

Aspose.Cells for .NET(点击下载)是Excel电子表格编程API,可加快电子表格管理和处理任务,支持构建具有生成,修改,转换,呈现和打印电子表格功能的跨平台应用程序。 将Excel工作簿转换为...

mnrssj
7分钟前
0
0
对于绘画小白怎么画制服?该注意什么?

怎样制作学生服装?想必绘画初学者们常常会想的问题吧,不知道怎样才能画好人物的衣服,别着急,今日就在这儿讲一些关于如何绘画学生衣服校服的教程给我们!期望能够帮到你们! 轻便西装是不...

热爱画画的我
12分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部