领域驱动设计能做什么

一、前言

本篇文章会简要介绍领域驱动设计能做什么,以作为多篇介绍领域驱动设计文章的开篇。后面会使用领域驱动设计的英文缩写 DDD。之所以开篇介绍 DDD 能做什么,而不是介绍是什么,原因是后者答案很容易找,只需 Google 一下。而介绍 DDD 能做什么,则可以从实践的角度介绍学习和使用 DDD 的必要性。

整体而言,DDD 还是一门偏小众的技术,了解者比例不高,更多的人也还没有意识到它的重要性。这也是写此篇文章的一个重要原因。

当然,虽然全篇不会介绍什么是 DDD,但是一句话介绍还是少不了:领域驱动设计是一种思想,用来指导复杂的软件系统的设计。正如那本同名书的副标题 ——《软件核心复杂性应对之道》。所以,领域驱动设计的思想是值得每一位从事软件系统开发,尤其是业务系统开发的同学了解学习的。

接下来简单介绍一下 DDD 在软件开发各方面中所能起到的作用。

二、DDD 的作用

1. 需求讨论

软件开发的很多问题其实源于需求讨论阶段。需求讨论不清、对需求的误解,等等,都会从一开始就对软件开发造成负面影响。

那 DDD 如何可以解决这一个问题?DDD 解决这一问题的方法的核心是 Ubiquitous Language —— 通用语言。

DDD 指出,对业务知识抽象建模而形成的领域模型应当成为软件开发交流过程中使用的通用语言。对于同一个业务概念,需求文档和代码实现中应该使用同一个词语去表述。不仅表面上的命名需要一致,背后的含义也应当是一致的。

这么做原因在于,软件开发过程中,同一个词,在产品经理和工程师的脑中,可能有着不一致的含义和理解。虽说这种不一致一般不至于差出十万八千里,但在复杂的系统开发中,即便是细小的差异,经过需求的组合以及时间的积累,最终会导致比较大的差异。而这种差异会对后来的软件开发造成越来越大的麻烦。

而在软件开发中应用 DDD,则可以避免这种问题的发生。

2. 系统设计

现在的业务系统的开发,使用的技术有了很大的进步,但是很多系统的设计似乎同十几年前并没有太大差别。虽然大家所使用的语言,如 Java、Python、Javascript、Go 等,都或多或少的包含了面向对象的特性,但大部分程序还是以面向过程的思维被设计。而这会导致很多系统设计层面的问题,例如过于复杂、庞大的业务层。

我对系统设计的看法是:对于一个系统的整体设计,更多的应当是使用面向对象的思想,面向过程的思想更多的是应用在具体功能设计上。

在面向对象设计的实际应用方面,DDD 能够提供非常好的实践性指导。这就是 DDD 在系统设计方面的意义。

3. 接口设计

在我工作过的项目中,接口设计常常是一个难题。接口不同于代码实现,代码实现可以经常修改,但接口一旦发布就很难修改了。所以,接口的设计需要非常慎重的考虑。

如何设计接口呢?在这方面,REST 是一个很好的实践。当然我不是说 REST 能解决所有的接口设计问题,确实有很多接口不适合用 REST 设计,也有很多接口使用类似但非标准的 REST 接口形式设计。但我建议,在设计接口时请认真考虑 REST 风格。

在使用 REST 风格设计接口时,需要考虑的重要问题包括确定系统中有哪些 Resource、这些 Resource 之间的关系是什么?

其实 REST 接口中的 Resource 其实可以与领域驱动设计中的实体互相等同。如果一个系统设计使用了领域驱动设计,那确定 Resource,以及它们之间的关系也就不是难事。自然,设计出合理的接口也就变得更加容易。

五、小结

大家在讨论技术问题时,往往会关注新和大的话题,比如某种新技术、新框架,或者某某系统的高可用架构设计、双11、大促系统设计等等。

这样的题目显然更吸引眼球。虽然这些高大上的内容是大家在工作中需要考虑的内容,也很重要,但是不应因此忽视平时工作更常遇见的问题 —— 如何设计好复杂的业务系统。

如果不能解决好业务系统的复杂性问题,那些如高可用、高并发、多机房容灾等等的高大上的技术改进工作实施起来也会变得异常困难。最重要的是,如果整个团队被业务问题搞得焦头烂额时,还有多少精力和热情投入到技术改进工作呢?

所以,从上面这个角度讲,领域驱动设计解决的不仅是业务系统的复杂性问题。

对于前面讲到的内容,我会在后续的文章中做更详细的介绍。

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

推荐阅读更多精彩内容

  • 10月有幸参加ThoughtWorks组织的《领域驱动的微服务架构设计实战工作坊》培训课程,尽管课程时间只有短短一...
    李戬plutocracy阅读 6,984评论 4 36
  • 有位朋友最近在为企业做领域驱动设计(Domain Driven Design)内训时,遇到一位资深学员向他抱怨该技...
    MagicBowen阅读 18,524评论 8 66
  • 开心有时也很容易啊,比如刚到车站车就来了,随机播放正好是最近喜欢的歌,还有今晚的风真舒服。晚安,好梦。
    大益阅读 184评论 0 0
  • (二)似曾相识未谋面,一见倾心网结缘 中国水仙花属石葱科、水仙属多年生草本植物,鳞茎生得颇象洋葱、大蒜、故六朝时称...
    昊水长天阅读 555评论 0 5
  • 抠图法 打开照片—复制图层—快速选择工具选择背景—编辑菜单—填充—前景色
    南下双鱼阅读 302评论 0 2