39

领域驱动设计,说起来容易做起来难

 4 years ago
source link: https://www.tuicool.com/articles/EJB7bqf
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

JVvYfuA.jpg!web

领域驱动设计(DDD)是如今的热门话题。大家已经公认,不是所有问题都可以靠程序员去解决就足够的,想要解决足够专门领域的问题,必须学习专门领域的知识, 尊重专门领域的规律, 针对专门领域进行设计。

不过在这些共识之外,怎么做DDD,共识却没有那么多,相当多的基础问题都还没有解决。

比如,很多时候专门的领域通用语言都没有建立起来,术语表都没有制定,结果业务人员和开发人员各说各话,同一个名词多种解释的情况都无法避免。

我问过不少人对这种问题的看法,答复都是“道理我们都懂,实在是没时间都做到,而且大家都叫习惯了也不好改”。这或许是实际情况,但这种情况下搞“领域驱动设计”,结果可想而知。

还有,如何划分边界?许多人都懂得“高内聚,低耦合”,但如何内聚,如何解耦合,却不是人人都说得清楚的。许多设计图看起来像模像样,设计者却搞不明白 谁和谁是一家人,谁和谁是远亲,谁和谁是近邻?

夸张点说,甚至有相当多的人不知道“异步其实是一种解耦合的方式”,也不清楚异步会引入更多的复杂度,尤其是丢失实时报错的便利,而只是简单把异步当成解决性能问题的手段,这样做出来的设计,结果也是可想而知的。

所以,尽管“领域驱动设计”很热门,但学习起来并不容易。除了公认的经典著作《领域驱动设计》,更合适的办法还是以例子来教学,经过讨论、对比、反思来理解,这样才算真正掌握了。

如果你也认同我的观点,不妨看看参考  逸  在 GitChat 推出的 《领域驱动设计实践·战术篇》,或许有助于加深理解领域驱动设计。

张逸曾在第一届领域驱动设计中国峰会上做过《领域驱动架构透析与架构解耦》的演讲, 在领域驱动设计领域有丰富的经验。

在探讨领域驱动战术设计的一些问题时,总会有人纠结:

  • 这个领域对象应该定义成实体,还是值对象?

  • 领域服务和应用服务的区别是什么?

  • 聚合的边界该怎么划分?

在软件开发领域,没有什么一劳永逸的实现,也没有什么放之四海而皆准的标准,必须结合具体的业务场景做出合理的决策,无论建模和设计再怎么完美,也需要通过落地的检验才知道好还是坏。

任何脱离具体业务场景的问题分析,都是空谈; 任何不落地的完美方案,都是浮夸。 领域驱动设计没有标准,有的只是持续不断的不确定性。正所谓“以不变应万变”,我们要从实证主义的角度看待领域驱动设计,我认为,只需守住三项基本原则即可:

  • 必须通过领域建模来驱动设计

  • 领域专家或业务分析师必须参与到建模活动中

  • 设计必须遵循面向对象分析和设计的思想与原则

只要做到这三点,领域驱动战术设计就不会做得太差,剩下的不足,就需要靠经验来填补了。

要掌握领域驱动设计,就不要被它给出的概念所迷惑,而要去思索这些概念背后蕴含的原理,多问一些为什么。 同时,要学会运用设计原则去解决问题,而非所谓的“设计规范”。

我强烈建议大家要学会对设计的本质思考,不要只限于对设计概念的掌握,而要追求对设计原则与方法的融汇贯通。只有如此,才能针对不同的业务场景灵活地运用领域驱动设计,而非像一个牵线木偶般遵照着僵硬的过程进行死板地设计。

去年,张逸的 《领域驱动设计实践》系列课程在 GitChat 上发布了上篇 《领域驱动 设计实践· 战略篇 。如今,读者们千呼万唤催更而来的下篇 《领域驱动 设计实践 · 战术篇 正式上线啦,这个 上下篇的套装 结合了作者十多年来的实践领域驱动设计的经验心得,而且糅合了 DDD 社区最新发展的理论知识与最佳实践,推荐给大家学习。

感兴趣的同学,扫 特价 订阅套装

qEFFNrz.jpg!web

(套装原价 168 元,两个课程的合订套装共 100 篇)

本套装的 上篇 《领域驱动 设计实践· 战略篇 课程分为五部分,共计 36 篇,已全部更新完毕。

第 1-1~1-5 课:软件复杂度

第 2-1~2-5 课:领域知识

第 3-1~3-10 课:限界上下文

第 4-1~4-8 课:架构与代码模型

第 5-1~5-6 课:EAS 系统的战略设计实践

本套装的 下篇 《领域驱动 设计实践 · 战术篇 正是要解决前面所提及的战术层面的设计问题。 若要做到优良的领域驱动设计,建模和设计的经验必不可少,这需要多年的项目实战打磨。但如果在开始之初,能有一些更为具体的方法作为指引,或许可以让掌握技能的周期大幅度缩短。

对于开发团队来说,决定是否采用领域驱动设计,在于业务的复杂度。我在本课程中,一方面分享了我的 设计体验和方法, 以帮助团队成员的成长,另一方面也给出了一个 操作性强的设计过程 可以让基础相对薄弱的开发人员能够依样画葫芦,做出还算不错的设计与实现。

《领域驱动 设计实践 · 战术篇 的课程思路就是:以能学习和模仿的战术设计方法来弥补经验之不足,以设计思想和设计原则作为指导来解决争议之问题,以能够落地的解决方案来体现领域驱动设计之价值。

本课程分为六部分,共 64 篇。

第 1-1 ~ 1-15 课:软件系统中的模型

第 2-1 ~ 2-7 课:领域分析模型

第 3-1 ~ 3-17 课:领域设计模型

第 4-1 ~ 4-6 课:领域实现模型

第 5-1 ~ 5-9 课:融合:战略设计和战术设计

第 6-1 ~ 6-8 课:EAS 系统的战术设计实践

以上的两个课程还配套建立了读者交流群,同时邀请了十几位领域驱动设计方面的专家加入,共同探讨和交流领域驱动设计的相关知识。

6nIJB3V.jpg!web

VfUbAbb.jpg!web

还没订阅过《领域驱动设计实践》的新同学们,点击 阅读原文 直接订阅合集 更优惠 哦!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK