如何使用 DSL 实现 DDD 的快速落地
开发大型软件最难的部分并不是实现,而是要深刻理解它所服务的现实世界的领域。领域驱动设计(Domain-Driven Design,DDD) 是一种处理高度复杂领域的愿景(Vision)和方法,它主张在软件项目中把领域本身作为关注的焦点,维护一个对领域有深度认知的软件模型。
领域驱动设计(DDD),其实就是以领域模型驱动软件设计。要理解 DDD,关键是理解什么是 DDD 所指的领域模型,但在此之前,还是应该先认识一下软件开发的过程。然后,基于此认识重温一下 DDD 在战术以及战略层面的若干关键概念。
2004 年,DDD(领域驱动设计)这一软件开发的方法与愿景经由建模专家 Eric Evans 的经典著作Domain-Driven Design: Tackling Complexity in the Heart of Software 正式面世,当即获得了广泛关注和高度评价。17 年间,网上越来越多关于 DDD的文章和讨论。为什么我们现在还不停地讨论 DDD?为什么DDD仍然如此重要?
在商业组织中,主张“技术为业务服务”的企业总可以在理论上立于不败之地。诚然,DDD主张在软件项目中把领域本身作为关注的焦点(换句话说就是技术人员要懂业务)符合这种思想,但真正难能可贵的是,DDD提供了切实可行的应对软件核心复杂性的方法。
实践证明,DDD 提出的方法不仅行之有效,而且历久弥新。
关于“产业互联网即将进入黄金时代”的说法,大多是众多传统企业希望借力最新的信息化,特别是互联网工具(即所谓“互联网+”),提升内部效率和对外服务的能力。传统产业中的很多领域概念和业务流程并不一定为普通的开发者所熟知——这与“消费互联网”不同,显然人人都是消费者。所以,传统产业的信息化急需可以快速梳理并深刻地认知领域,以及能构建高质量领域模型的技术人才。DDD 可以说是技术人员升职加薪的“神兵利器”。
我在工作中看到的情况是,越来越多的技术人员在自己的求职简历上写上了 “熟悉(或精通)DDD” 的描述。确实,Eric Evans 的经典著作以抽象、凝练著称,可谓字字珠玑,甚至很多资深技术人员都不能领悟其中玄妙。所以,我也认同掌握 DDD 是一件足以让技术人员引以为傲的事情。
系统越复杂、代码规模越大,DDD 的优势就越明显
可以说,DDD 是公认的解决软件核心复杂性的“大杀器”。但是,在软件开发中实践 DDD 是需要付出相当大的成本的。也就是说,大家的普遍看法是:实践 DDD 是一个先苦后甜的过程,一个项目要不要采用DDD,最好先看看它值不值得。
但是一个项目值不值得使用 DDD 有时不好判断。大项目往往是由小项目发展而来的,很多从小项目演化而来的大系统最终变成开发团队的噩梦,噩梦的根源几乎无一例外地在于软件的概念完整性遭到了破坏。而DDD正是维护软件概念完整性的良药。如果在项目中实践 DDD 的成本不高,那么即使是小项目,从一开始就使用 DDD 不是一件很美好的事情吗?
在软件开发项目中实践 DDD 到底有何难处?
实践DDD首先需要面对的一个(也许是最大的)难题是:难以描述的领域模型。 DDD 想要构建的领域模型是什么?按照 Eric Evans 的观点,领域模型不是一幅具体的图,而是那幅图想要传达的思想;不是一个领域专家头脑中的知识,而是那些经过严格组织并进行选择性抽象的知识。
听起来是不是有点玄奥?系统分析师、产品经理到底要拿出什么样的领域模型才能说“我的工作已经做到位了”?这个模型到底是不是可以实现的?开发人员、测试人员到底有没有理解这个模型?大家的理解是不是一致的?
说到底,一个领域模型要想有用,它必须足够严格。如何使用一种严格的方式描述经过严格组织并进行选择性抽象的知识呢?
问题的答案很自然地指向了 DSL。
其实,Eric Evans 早就意识到了这一点。他曾经在访谈中说:更多前沿的话题发生在领域专用语言(DSL) 领域,我一直深信 DSL 会是领域驱动设计发展的下一大步。现在,还没有一个工具可以真正给我们想要的东西。但是人们在这一领域比过去做了更多的实验,这使我对未来充满了希望。
可以告诉大家的是:在项目中运用 DDD 可以不像大家想象的那么痛苦,DDD 并不是只适用于大项目,使用 DDD 并不一定需要牺牲敏捷性,一切的关键在于 DSL 的运用。
我和我工作过的团队曾经在多个项目中使用 DSL 实现了 DDD 的真正落地。独乐乐不如众乐乐!现在,我把这些实践经验写在了《深入实践DDD:以DSL驱动复杂软件开发》一书中分享给大家。
《深入实践DDD:以DSL驱动复杂软件开发》
内容简介
本书是目前市场上唯一一本阐述如何通过使用领域专用语言(DSL)实现领域驱动设计(DDD)的图书。
书中首先带领读者重温DDD在战术设计层面及战略设计层面上的部分重要概念,并简要介绍了自DDD社区兴起的一些软件架构模式。
然后阐述如何设计一门DDD原生的DSL,包括这个DSL的规范支持哪些特性、帮助团队如何描述领域模型的方方面面、这些特性的选择基于何种考量等。
在此基础上详细讲解了如何使用技术工具将描述领域模型的DSL文档直接转化为可以工作的软件代码,在这个过程中结合诸多来自商业软件开发工作中的真实案例,展示并分析了大量的关键代码,让读者可以深入地了解制造那些基于DSL的DDD技术工具的秘密。
最后讲述了一些建模案例,并探讨了一些与DDD相关的其他话题,对读者开拓技术思维、更深刻地理解DDD有所助益。
抽奖赠书
截止时间:2021年8月22日 17:00
如何抽奖:点击下方卡片,关注并回复关键词 :20210818
下次你更希望我们送哪本书呢?
留言告诉我们!
如何使用 DSL 实现 DDD 的快速落地相关推荐
- python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...
python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...
- 孵化业务快速落地与优化
海外酒店是酒旅事业群第一个孵化的业务,从2016年9月份开始到现在已经半年多的时间.在业务后台搭建.成长.优化过程中,经历了很多的思考与选择. 主要分为下面几个阶段: 初建:调研.落地,合理复用,高效 ...
- 开源mes系统_如何让iMES系统快速落地变得so easy?
如何让iMES系统快速落地变得so easy?没有任何一套iMES系统不经交付过程,就可以完美的匹配于企业的业务流程,尽快现在很多基于SaaS概念的云端的iMES产品号称可以2周上线,但是只有经过精心 ...
- AI产业快速落地难?破局人来了
过去十年,中国人工智能技术飞速发展,专利申请量位居世界第一,占全球总量的74.7%,是排名第二的美国专利申请量的8.2倍,技术实力遥遥领先.在国家政策的大力推动下,人脸识别.超级计算机.人工智能实验室 ...
- python coding style guide 的快速落地实践
python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...
- 分享实录|区块链技术如何快速落地
十年前,中本聪发表了一篇论文,此后有了比特币,也就是说先有比特币后有区块链,要想了解区块链,我们需要先了解比特币和这位非常重要的人物-中本聪. 在大家看来,中本聪首先是一个计算机专家,其次是一位资深的 ...
- python coding style why_python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...
python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...
- 哈喽出行在DDD方面的落地
本文章出自柴华老师在[deeplus直播第273期]线上分享演讲内容,由本人在网上收集到的线上分享的文字版本. 我们今天的主题<DDD在哈啰交易中台的实践>,最近几年中台微服务越来越火,D ...
- Rock Pi开发笔记(一):Rock Pi系列arm产品方案快速落地方案介绍
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
最新文章
- Ctrl+C提示是否终止shell脚本
- Ubuntu14.04下安装eclipse
- intp适合学计算机吗,⑨MBTI测试,分析INTP型人格的专业选择和职业选择
- VS加快程序编译速度——以VS2013为例
- container and Injection
- ConfigParser.InterpolationSyntaxError: ‘%‘ must be followed by ‘%‘ or ‘(‘, found: “%‘“
- 网络管理员掌握的学习方法
- HTML+CSS+JS实现十款好看的登录注册界面模板,赶紧收藏起来吧!
- Caliburn.Micro WPF教程——创建项目
- Dell 禁用触摸板
- 2021年中国发改委和财政部PPP项目整体现状分析,城市基础建设仍是重中之重「图」
- 美国高等教育信息素养能力标准
- php怎么实现拼图功能,照片拼图效果怎么做 将一张照片制作成拼图的效果
- REST API详解
- BZOJ 4816(莫比乌斯反演
- l计算机中数的表示教案,计算机一级B第一章教案汇总.doc
- vue01-前端知识体系(狂神)
- 【已解决】mac monterey重装系统 pkdownloaderror错误8 报错
- 3轮全向轮正解---41
- zookeeper 监控