如何系统学习领域驱动设计?

640?wx_fmt=jpeg


一、领域驱动设计为何又焕发青春?


领域驱动设计(Domain Driven Design,DDD)确实已不再青春,从 Eric Evans 出版了划时代的著作《领域驱动设计》至今,已有将近十五年的时间,在软件设计领域中,似乎可以称得上是步入老年时代了。可惜的是,对于这样一个在国外 IT 圈享有盛誉并行之有效的设计方法学,国内大多数的技术人员却并不了解,也未曾运用到项目实践中,真可以说是知音稀少。DDD 似乎成了一门悄悄发展的隐学,它从来不曾大行其道,却依旧顽强地发挥着出人意料的价值。


直到行业内吹起微服务的热风,人们似乎才重新发现了领域驱动设计的价值,并不是微服务拯救了领域驱动设计,是因为领域驱动设计一直在坚硬的生长,然而看起来,确乎因为微服务,领域驱动设计才又焕发了青春。

我从 2006 年开始接触领域驱动设计,一开始我就发现了它的魅力并沉迷其间。从阅读 Eric Evans 的《领域驱动设计》入门,然后尝试在软件项目中运用它,也取得了一定成效。然而,我的学习与运用一直处于摸索之中,始终感觉不得其门而入,直到有机会拜读 Vaughn Vernon 出版的《实现领域驱动设计》一书,并负责该书的审校工作,我才触摸到了领域驱动从战略设计到战术设计的整体脉络,并了解其本质:领域驱动设计是一个开放的设计方法体系


即使如此,许多困惑与谜题仍然等待我去发现线索和答案。设计总是如此,虽然前人已经总结了许多原则与方法,却不能像数学计算那样,按照公式与公理进行推导就一定能得到准确无误的结果。设计没有唯一的真相。


《实现领域驱动设计》:https://item.jd.com/11423256.html


二、为什么要学习领域驱动设计?


如果你已经能设计出美丽优良的软件架构,如果你只希望脚踏实地做一名高效编码的程序员,如果你是一位注重用户体验的前端设计人员,如果你负责的软件系统并不复杂,那么,你确实不需要学习领域驱动设计!

领域驱动设计当然并非“银弹”,自然也不是解决所有疑难杂症的“灵丹妙药”,请事先降低对领域驱动设计的不合现实的期望。我以中肯地态度总结了领域驱动设计可能会给你带来的收获:


  • 领域驱动设计是一套完整而系统的设计方法,它能带给你从战略设计到战术设计的规范过程,使得你的设计思路能够更加清晰,设计过程更加规范。


  • 领域驱动设计尤其善于处理与领域相关的高复杂度业务的产品研发,通过它可以为你的产品建立一个核心而稳定的领域模型内核,有利于领域知识的传递与传承。


  • 领域驱动设计强调团队与领域专家的合作,能够帮助团队建立一个沟通良好的团队组织,构建一致的架构体系。


  • 领域驱动设计强调对架构与模型的精心打磨,尤其善于处理系统架构的演进设计。


  • 领域驱动设计的思想、原则与模式有助于提高团队成员的面向对象设计能力与架构设计能力。


  • 领域驱动设计与微服务架构天生匹配,无论是在新项目中设计微服务架构,还是将系统从单体架构演进到微服务设计,都可以遵循领域驱动设计的架构原则。


三、学习领域驱动设计的秘诀


没有谁能够做到领域驱动设计的一蹴而就,一门课程也不可能穷尽领域驱动设计的方方面面,从知识的学习到知识的掌握,进而达到能力的提升,需要一个漫长的过程。所谓“理论联系实际”虽然是一句耳熟能详的老话,但其中蕴含了颠扑不破的真理。我在进行领域驱动设计培训时,总会有学员希望我能给出数学公式般的设计准则或规范,似乎软件设计就像拼积木一般,只要遵照图示中给出的拼搭过程,不经思考就能拼出期待的模型。——这是不切实际的幻想。

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


  • 思考限界上下文边界的划分,实际上还是“高内聚、低耦合”原则的体现,只是我们需要考虑什么内容才是高内聚的,如何抽象才能做到低耦合?


  • 是否需要提取单独的限界上下文?是为了考虑职责的重用,还是为了它能够独立进化以应对未来的变化?


  • 在分层架构中,各层之间该如何协作?如果出现了依赖,该如何解耦?仍然需要从重用与变化的角度去思考设计决策。


  • 为什么同样遵循领域驱动设计,不同的系统会设计出不同的架构?这是因为不同的场景对架构质量的要求并不一样,我们要学会对架构的关注点做优先级排列,从而得出不同的架构决策。


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


四、首个全面讲解 DDD 的原创课程


国内关于领域驱动设计(Domain Driven Design,DDD)的原创书籍少之又少,甚至可以说没有,我结合了十余年实践领域驱动设计的经验与心得,并糅合了 DDD 社区最新发展的理论知识与最佳实践,策划了《领域驱动设计实践》系列课程(https://link.zhihu.com/?target=https%3A//gitbook.cn/gitchat/column/5b3235082ab5224deb750e02),可以称得上是国内第一个全面讲解 DDD 的原创课程


本系列课程拆分为两个课程,即《领域驱动战略设计实践》和《领域驱动战术设计实践》,分别对应领域驱动设计的战略设计阶段与战术设计阶段。


本课程是《领域驱动设计实践》系列课程的第一个课程,其全面覆盖了领域建模分析与架构设计的战略设计过程。从剖析软件复杂度的根源开始,引入了领域场景分析与敏捷项目实践,帮助需求分析人员与软件设计人员分析软件系统的问题域、提炼真实表达的领域知识、最终建立系统的统一语言。


本课程将主流架构设计思想、微服务架构设计原则与领域驱动设计中属于战略设计层面的限界上下文、上下文映射、分层架构结合起来,完成从需求到架构设计再到构建代码模型的架构全过程。


此外,本课程内容的每一个知识点都会结合项目实践案例来讲解,力求内容的深入浅出,并在讲解过程中介绍了诸多架构设计原则与模式,丰富了知识内涵,但又不仅只限于对领域驱动设计的覆盖。同时,本课程也可以作为软件架构设计的参考书。


为了让读者更容易掌握整个战略设计的全过程,最后还给出了一个真实的完整案例:EAS 系统,结合该案例来讲解如何在项目实践中进行领域建模分析、识别限界上下文,并最终构建整个系统的架构。


张逸的达人课:https://link.zhihu.com/?target=https%3A//gitbook.cn/gitchat/column/5b3235082ab5224deb750e02(可点击阅读原文跳转)


五、送给所有喜欢 DDD 读者的肺腑之言


如果我们能够走在迈向唯一真相的正确道路上,那么每前进一步,就会离这个理想的唯一真相更近一步,这正是我推出这门课的初衷。也并不是说我贴近了唯一真相,更不是说我已经走在了正确道路上,但我可以自信地说,对于领域驱动设计,我走在了大多数开发人员的前面,在我发现了更多新奇风景的同时,亦走过太多荒芜的分岔小径,经历过太多坎坷与陷阱。我尝试着解答领域驱动设计的诸多谜题,期望能从我的思考与实践中发现正确道路的蛛丝马迹。


我写的这门课程正是我跌跌撞撞走过一路的风景拍摄与路径引导,就好似你要去银河系旅游,最好能有一本《银河系漫游指南》在手一样,不至于迷失在浩瀚的星空之中,我期待这门课程能给你带来这样的指导。加油!


如果你对学习本课程有任何疑问,欢迎通过 GitChat 的读者圈功能与我交流互动,我会极可能及时回答每个人的问题。具体方式请关注微信号:GitChat


640?wx_fmt=jpeg张逸 · 架构编码实践者


专家推荐


张逸不但拥有过硬的领域驱动设计实践经验,而且是一位能够深入浅出的阐释者。这两项特质保证大家能够收获满满!

——ThoughtWorks 咨询总监、精益敏捷专家,肖然


我做了多年大规模微服务架构,也见了许多微服务实施案例,其中做得好的无一例外对领域模型有了深入的分析,做得不好的往往只关注工具和框架而忽略了领域模型。张逸是国内 DDD 领域少有的专家,我向大家推荐他的《领域驱动设计实践》系列课程。

——阿里巴巴高级技术专家,许晓斌


国内同仁写的软件需求设计方面的图书,我都有收集,但能认真阅读的不多。张逸写的书是少数我认真阅读过的,推荐给大家。

——UMLChina 首席专家,潘加宇


640?wx_fmt=jpeg


作者简介:张逸,曾先后就职于中兴通讯、惠普 GDCC、中软国际、ThoughtWorks 等大型中外企业,任职角色为高级软件工程师、架构师、技术总监、首席咨询师。

精通包括 Java、Scala、Python、C#、JavaScript、Ruby 等多种语言,熟练掌握面向对象思想、测试驱动开发与重构、领域驱动设计、函数式编程、架构、大数据分析、敏捷与过程改进,并致力于大型软件企业的面向服务系统架构设计、大数据平台架构设计以及互联网 Web 系统架构设计。

著译作包括《软件设计精要与模式》、《Java 设计模式》、《恰如其分的软件架构》、《WCF 服务编程》、《人件》、《重构——改善既有代码设计》评注版、以及《架构之美(Beatiful Architecture)》评注版。

版权声明:本文及文中所涉及课程均为 GitChat 平台独家发布,未经授权不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何运用DDD解决团队协作与沟通问题?

领域驱动设计的核心是“领域”,因此要运用领域驱动设计,从一开始就要让团队走到正确的点上。当我们组建好了团队之后,应该从哪里开始?不是UI原型设计,不是架构设计,不是设计数据库,这些事情重要…

微服务等于Spring Cloud?一文告诉你微服务到底是什么

作者:TIM XU 原文:https://xiaoxubeii.github.io/articles/microservices-architecture-introduction/1微服务初探什么是微服务?首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应…

我们爬了上千个数据分析师信息, 你真的懂数据分析师嘛?

01 项目简介有人说,这个时代,只要站在了风口,猪都能飞起来,尤其互联网行业,千变万化,日异月殊,一不小心就错过了风口,如果没记错的话,前几年火的是App开发,后…

高可用Redis服务架构分析与搭建

作者:HorstXu 原文:https://www.cnblogs.com/xuning/p/8464625.html基于内存的Redis应该是目前各种Web开发业务中最为常用的Key-Value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热…

java怎么弄redis,java怎么使用redis

开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java。Java的安装配置可以参考我们的 Java开发环境配置 接下来让我们安装 Java redis 驱动:首先你需要下载驱动包 下载 jedis.ja…

我花了14个小时找了一下长春长生们究竟卖到了哪里去

前言本文首发于个人的公众号和v2ex,事先也没想到会有这么多人关注。在这边重新编辑一下,去掉了原先前言中对此次疫苗事件背景的描述及部分不严谨的措辞。全文的观点从技术讨论出发,尽量客观中立,观点及行为为员工自发,…

我们分析了50万条拼多多商品数据,告诉你到底是消费升级还是降级?

作者:放开那个猕猴桃来源:人工智能与大数据生活转自:知乎,恋习Python一、缘起我在杭州有位朋友,提到有家做社交的电商很火,叫拼多多,我没有在意,直到有一天,我居然在电视…

java并发集合面试题,那些经常被问的JAVA面试题(1)—— 集合部分

【本文转自极客原创 作者:张锋 原文链接:】Java集合框架是什么?说出一些集合框架的优点?每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用&…

拯救阿波罗14号!那些伟大太空计划背后的计算机工程师们

1971年1月31日,阿波罗14号发射。外太空旅行近一周后的凌晨,回程中的阿波罗14号突然面临一个严峻的问题:它可能没办法正常降落了。问题出在其计算机工程师Don Eyles编写的一个应急程序上,他必须在很短的时…

golang web php,golang 适合做web开发吗

使用go语言来做web开发,是非常方便的。如果不使用框架,仅仅使用net/http包,也能快速开发一个web应用。但是,官方包不支持RESTful风格的API,所以我们依然还是需要选择一个框架来帮助我们进行开发。 (推荐学习&#xff1…

我又花了28个小时分析了一下各省二类疫苗采购公示数据

1前 言距离《我花了14个小时找了一下长春长生们究竟卖到了哪里去》发出来已经过去了4天,过去的几天里,每天晚上我都在搜集和整理数据,终于把之前没做完的工作做的差不多了。现在做一个大致的总结,分析相对粗略,大家见…

[重磅] 如何更好地实现服务调用和消息推送

第四届阿里中间件性能挑战赛是由阿里巴巴集团发起,阿里巴巴中间(Aliware)、阿里云天池联合举办,是集团少有的工程性品牌赛事。大赛的初衷是为热爱技术的年轻人提供一个挑战世界级技术问题的舞台,希望选手在追求性能极致的同时,能深…

开发怼产品,天经地义?大惊小怪?

最近,又有一件轰动程序员界的事情发生了,想必大家伙都已经奔走相告了。来回顾下事情的经过,1张图就能说明白了骚不?反正有句话叫「从技术层面出发,总归有办法实现的」,还有这么一句话叫「从技术角度出发&am…

php实现数据排序算法,PHP实现排序堆排序算法

这篇文章主要为大家详细介绍了PHP实现排序堆排序(Heap Sort)算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下算法引进:在这里我直接引用《大话数据结构》里面的开头:在前面讲到 简单选择排序 ,它在待排序的 n 个…

谷歌Edge TPU:将机器学习引入边缘,撬动边缘计算/IOT大“地球”

近期,谷歌在Cloud Next会议上推出其最新产品,Edge TPU芯片和Cloud IOT Edge软件,并将于10月推出Edge TPU开发套件。作为Cloud TPU的补充,目前Edge TPU仅用于推理,专为在边缘运行TensorFlow Lite ML模型而设计。Edge TP…

详解云计算、大数据和人工智能的区别与联系

今天跟大家讲讲云计算、大数据和人工智能。为什么讲这三个东西呢?因为这三个东西现在非常火,并且它们之间好像互相有关系:一般谈云计算的时候会提到大数据、谈人工智能的时候会提大数据、谈人工智能的时候会提云计算……感觉三者之间相辅相成…

关于腾讯云丢数据事件的一些看法

事件回顾:创业公司“前沿数控”8月5日发文称,公司存放在腾讯云上的精准注册用户以及内容数据全部丢失,并且不能恢复,造成公司平台全部停运的状态。前沿数控表示,公司丢失的数据近千万元级,对此索赔1000余万…

Navicat for mysql备份与恢复

文章目录 一、Navicat for mysql备份1.打开navicat,找到备份2.点击新建备份,直接点备份3.备份完成 二、恢复数据1.删除表2.点击备份,选中备份文件,点击还原备份3.还原完成 三、其他命令四、视频演示总结 一、Navicat for mysql备份…

一文详解微服务架构的数据设计

微服务是一个软件架构模式,对微服务的讨论大多集中在容器或其他技术是否能很好的实施微服务这些方面。本文将从以下几个角度来和大家分享在微服务架构下进行数据设计需要关注的地方,旨在帮助大家在构建微服务架构时,提供一个数据方面的视角:什…

干货 | 数据分析的 7 个关键步骤是什么?

“数据科学家” 这个名号总让人联想到一个孤独的天才独自工作,将深奥的公式应用于大量的数据,从而探索出有用的见解。但这仅仅是数据分析过程中的一步。数据分析本身不是目标,目标是使企业能够做出更好的决策。数据科学家构建出的产品&#x…