“领域驱动设计”答疑(三)

DDD

问题:领域驱动设计要怎么学习?有哪些推荐书籍?

如前文所说,领域驱动设计不是一个完备的软件设计过程或方法,它设立了一个目标,然后只给出了部分方法。它依赖的基础是软件设计、编码的基本功以及演进式设计的工程能力。所以学习和实践领域驱动设计,起点是了解领域驱动设计是什么,然后根据需要补各种软件基本功,以及通过实践提高动手能力。

学习领域驱动设计,首先是阅读介绍领域驱动设计的书籍。
  • 《领域驱动设计》: 领域驱动设计之父Eric Evans写的书;

  • 《实现领域驱动设计》:Vaughn Vernon写的讲领域驱动设计实现的书,从案例的角度讲的,因此容易理解很多;

  • 《领域驱动设计精粹》:Vaughn Vernon补充的一本领域驱动设计的quick start手册;

新学习领域驱动设计的同学可以从《领域驱动设计精粹》看起,然后再看看《领域驱动设计》和《实现领域驱动设计》。《实现领域驱动设计》围绕着案例讲,降低了领域驱动设计的学习难度,但是里面的例子相对简单,而且是JAVA领域的,其它领域的同学从这本书里面可以领会一下精神。

后文开始介绍需要在领域驱动设计之外补充的其它必备知识和技能。

关于软件建模,面向对象分析与设计的书:
  • 《面向对象分析与设计》: Grady Booch。通过理论与案例系统讲解面向对象分析与设计的书。比较早的书,可以选择性的看,有助于了解面向对象分析与设计建模的方方面面;

  • 《彩色UML建模》:Peter Coad。社区里经常提到的“四色建模方法”出自这本书;

  • 《软件方法》:UMLChina 潘加宇所著,目前只有上册。是我目前看到的国内出版的把业务建模和需求分析讲的得很棒的一本书,最重要的是这本书里面很多幽默的段子让整本书读起来非常有趣。

关于软件建模有很多书,还有例如《企业应用架构模式》、《面向模式的架构体系》等等。上述所有的书出的年代早晚不一,有值得学习的地方,也有受限于时代的地方。有时间可以多看一些,作为积累。

最后想说的是,领域模型建的是否合适,其实和对业务的理解深度关系更大。模型之所以要加上”领域“两个字做前缀,意味着要优先从领域出发。因此多去学一些业务知识,多去想一下那些不一致不协调的业务问题和代码问题背后更深层次的原因,多问一些为什么,探寻对领域更深入的洞察,是领域建模的核心工作。

从模型到代码的实现模式:
  • 《敏捷软件开发,原则模式与实践》:Robert C. Martin。就不用多介绍了。

  • 《设计模式》:不用过多介绍,属于基本功。使用设计模式的时候最好能和领域结合起来,做到抽象是领域模型的一部分,能够用团队可理解的模型概念做解释。

  • 《实现模式》:Kent Beck。实现模式位于设计模式与代码之间,它包括编写简洁、清晰、易扩展、易维护的代码的各个方面的最佳实践,回答很多为什么高手的代码要这样写的问题。

  • 《Clean Code》:Robert C. Martin。不用再多介绍了。

从模型到代码落地,需要及格线以上的代码基本功,这方面的书很多,需要多看多练。写的好的代码很容易就能看出背后的模型和设计;而写的差的代码实现复杂度高,和模型很难对应起来,需要看很多代码后在再经过仔细推敲,才能明白背后的设计。

要让代码清晰的反应模型和设计,一方面需要具备一定的面向模型的代码实现模式,让代码能够显示化的表达模型中的概念、关系和约束;另一方面,代码要从细节处做到clean,包括结构和命名都要力求精益求精,能够自注释。

演进式设计

《演进式架构》:Neal Ford , Rebecca Parsons , Patrick Kua。介绍了演进式架构的必要性以及如何在具体的软件开发流程中实现演进式架构。

《重构》:Martin Flower。代码重构能力是实现领域模型持续演进的必备技能。不得不说重构一词现今被用的过于宽泛,怎么高效的重构,可以参考《高效重构:正确理解重构》

《测试驱动开发》:Kent Beck。演进式设计离不开良好的开发者测试。 最佳的开发者测试实践依旧推荐采用测试驱动开发方法。

《持续集成》:Martin Flower。持续集成现今已经是软件开发的标配了,如今更多关注的是如何持续的提升持续集成流水线的效率,希望这方面会有新的作品出来。

《持续交付》:Jez Humble。不用过多的介绍,DevOps的经典书籍。推荐追求实践的同学可以找一些Jenkins2的书一起看看。

领域模型的持续演进,建立在一定的演进式设计能力之上。而演进式设计是需要上述种种技术和工程能力作为基础。每个软件团队在这方面的能力不一,但是都应该把这方面的能力作为团队持续改进的内容,以此提高软件开发的整体效率和响应力。

作为咨询师,很多设计和重构工作的起点都是从改进团队工程效率开始。只有先帮团队把缺失的能力(例如高效易用的开发者测试环境)构建起来,把各种工程实践的反馈时间优化到可接受的时间内(例如构建和流水线的反馈速度至少优化到分钟级别),才能支撑起随后的演进式设计过程。

刻意练习

上面推荐的所有书籍都是本人亲测过的:) 其中有一些看第一遍的时候一知半解,也是过好久之后才领悟,甚至明白有些内容未必再适合时下或者自己的上下文。所以读万卷书须得行万里路,理论需要刻意练习的反馈,才能知道里面的门门道道,真真假假。

对于练习,社区里有不少领域驱动设计的workshop,有时间精力的话可以择优参加。不过此类workshop我没有亲自参加过,所以没法做进一步评价或推荐。但是一般情况下workshop受限于时间和培训师的经历,很难做到既全面又深入,所以学完后须得在自己的场景进行再转化才能实践。

最好的练习当然是能够在自己的工作领域中实践,但是大多数人的工作领域场景单一受限,如果能够自行多找些建模的编程练习去做,以及多和高手交流,也能达到事半功倍的效果。

相比之下,咨询师有个天然优势是可以接触到各种不同类型的复杂项目,所以从来不缺刻意练习的环境和动力。但是这不代表咨询师就一定能做好建模设计,结果取决于咨询师有多大意愿去学习和思考对应的业务知识,以及能够投入多少精力去探索最佳的设计方案。

最后,推荐徐昊在极客时间上的专栏《如何落地业务建模》,里面有很多非常棒的洞见。


《“领域驱动设计”答疑(四)》

《“领域驱动设计”答疑(汇总)》

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

推荐阅读更多精彩内容

  • 问题:领域驱动设计的核心是“领域建模”,而软件如何进行”建模“这件事在二十年前,面向对象设计就已给出完整的方法论了...
    MagicBowen阅读 1,350评论 0 0
  • 问题: 重构项目如何借助领域驱动设计做指导? 简单地说:就是通过“领域建模”驱动对业务高效的学习和分析,并以“领域...
    MagicBowen阅读 1,044评论 0 1
  • 问题:代码如何和领域模型保持一致?C语言能清晰的表达领域模型吗? 第一个问题:代码和模型保持一致,需要掌握用编程语...
    MagicBowen阅读 900评论 0 1
  • 过去一年主要在大型嵌入式系统中进行软件重构的咨询工作。对于大规模的遗留系统重构,一方面会借助领域建模帮助深入了解业...
    MagicBowen阅读 1,091评论 0 2
  • 以下都是被问过的问题,我会把觉得适合放一起回答的归在同一篇中,写完后的在此文中放出链接。 如果还有其它问题,也欢迎...
    MagicBowen阅读 1,683评论 0 4