浅谈我对DDD领域驱动设计的理解.docx
《浅谈我对DDD领域驱动设计的理解.docx》由会员分享,可在线阅读,更多相关《浅谈我对DDD领域驱动设计的理解.docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、浅谈我对DDD领域驱动设计的理解-安全编程-次元立方网-电脑知识与技术互动沟通平台从碰到问题开场当人们要做一个软件系统时,一般总是由于碰到了什么问题,然后希望通过一个软件系统来解决。比方,我是一家企业,然后我觉得我如今线下销售本人的产品还不够,我希望能够在线上也能销售本人的产品。所以,自然而然就想到要做一个普通电商系统,用于实如今线销售本人企业产品的目的。再比方,我是一家互联网公司,公司有很多系统对外提供服务,面向很多客户端设备。但是近期由于各种原因,导致服务经常出故障。所以,我们希望通过各种措施提高服务的质量和稳定性。其中的一个措施就是希望能做一个灰度发布的平台,这个平台能够提供灰度发布的服
2、务。然后,当某个业务系统做了一些修改并需要发布时,能够使用我们的灰度发布平台来非常方便的实现灰度发布的功能。比方在灰度发布平台上方便的定制允许哪些特定的客户端才会访问新服务,哪些客户端继续使用老服务。灰度发布平台能够提供各种灰度的策略。有了这样的灰度发布机制,那即使系统的新逻辑有什么问题,受影响的面也不会很大,在可控范围内。所以,假如公司里的所有对外提供服务的系统都接入了灰度平台,那这些系统的发布环节就能够愈加有保障了。总之,我们做任何一个软件系统,都是有原因的,否则就没必要做这个系统,而这个原因就是我们碰到的问题。所以,通过问题,我们就知道了我们需要一个什么样的系统,这个系统解决什么样的问题
3、。最后,我们就很自然的得出了一个目的,即知道了本人要什么。比方我要做一个论坛、一个博客系统、一个电商平台、一个灰度发布系统、一个IDE、一个分布式消息队列、一个通信框架,等等。DDD切入点1-理解概念DDD的全称为Domain-drivenDesign,即领域驱动设计。下面我从领域、问题域、领域模型、设计、驱动这几个词语的含义和联络的角度去阐述DDD是怎样融入到我们平常的软件开发初期阶段的。要理解什么是领域驱动设计,首先要理解什么是领域,什么是设计,还有驱动是什么意思,什么驱动什么。什么是领域Domain?前面我们已经清楚的知道我们如今要做一个什么样的系统,这个系统需要解决什么问题。我以为任何
4、一个系统都会属于某个特定的领域,比方论坛是一个领域,只要你想做一个论坛,那这个论坛的核心业务是确定的,比方都有用户发帖、回帖等核心基本功能。比方电商平台、普通电商系统,这种都属于网上电商领域,只要是这个领域的系统,那都有商品阅读、购物车、下单、减库存、付款交易等核心环节。所以,同一个领域的系统都具有一样的核心业务,由于他们要解决的问题的本质是类似的。因而,我们能够推断出,一个领域本质上能够理解为就是一个问题域,只要是同一个领域,那问题域就一样。所以,只要我们确定了系统所属的领域,那这个系统的核心业务,即要解决的关键问题、问题的范围边界就基本确定了。通常我们讲,要成为一个领域的专家,必需要在这个
5、领域深化研究很多年才行。由于只要你研究了很多年,你才会碰到非常多的该领域的问题,同时你解决这个领域中的问题的经历也非常丰富。很多时候,领域专家比技术专家愈加吃香,比方金融领域的专家。什么是设计Design?DDD中的设计主要指领域模型的设计。为什么是领域模型的设计而不是架构设计或其他的什么设计呢?由于DDD是一种基于模型驱动开发的软件开发思想,强调领域模型是整个系统的核心,领域模型也是整个系统的核心价值所在。每一个领域,都有一个对应的领域模型,领域模型能够很好的帮我们解决复杂的业务问题。从领域和代码实现的角度来理解,领域模型绑定了领域和代码实现,确保了最终的代码实现就一定是解决了领域中的核心问
6、题的。由于:1领域驱动领域模型设计;2领域模型驱动代码实现。我们只要保证领域模型的设计是正确的,就能确定领域模型能够解决领域中的核心问题;同理,我们只要保证代码实现是严格根据领域模型的意图来落地的,那就能保证最后出来的代码能够解决领域的核心问题的。这个思路,和传统的分析、设计、编码这几个阶段被割裂并且每个阶段的产物也不同的软件开发方法学构成鲜明的比照。什么是驱动Driven?上面其实已经提到了,就是:1领域驱动领域模型设计;2领域模型驱动代码实现。这个就和我们传统的数据库驱动开发的思路构成比照了。DDD中,我们总是以领域为边界,分析领域中的核心问题核心关注点,然后设计对应的领域模型,再通过领域
7、模型驱动代码实现。而像数据库设计、持久化技术等这些都不是DDD的核心,而是外围的东西。领域驱动设计DDD告诉我们的最大价值我觉得是:当我们要开发一个系统时,应该尽量先把领域模型想清楚,然后再开场动手编码,这样的系统后期才会很好维护。但是,很多项目尤其是互联网项目,为了赶工都是一开场模型没想清楚,一上来就开场建表写代码,代码写的非常冗余,完全是经过是的考虑方式,最后导致系统非常难以维护。而且更糟糕的是,出来混总是要还的,前期的领域模型设计的不好,不够抽象,假如你的系统会长期需要维护和适应业务变化,那后面你一定会碰到各种问题维护上的困难,比方数据构造设计不合理,代码四处冗余,改BUG四处引入新的B
8、UG,新人对这种代码上手困难,等。而那时假如你再想重构模型,那要付出的代价会比一开场重新开发还要大,由于你还要考虑兼容历史的数据,数据迁移,怎样平滑发布等各种头疼的问题。所以,就导致我们最后天天加班。固然,我们都知道这个道理,但是我也明白,人的习惯很难改变的,大部分人都很难从面向经过式的想到哪里写到哪里的思想转变为基于系统化的模型驱动的思维。我想,这或许是DDD很难在中国或国外流行起来的原因吧。但是,我想这不应该成为我们放弃学习DDD的原因,对吧!概念总结:领域就是问题域,有边界,领域中有很多问题;任何一个系统要解决的那个大问题都对应一个领域;通过建立领域模型来解决领域中的核心问题,模型驱动的
9、思想;领域建模的目的针对我们在领域中所关心的问题,即只针对核心关注点,而不是整个领域中的所有问题;领域模型在设计时应考虑一定的抽象性、通用性,以及复用价值;通过领域模型驱动代码的实现,确保代码让领域模型落地,代码最终能解决问题;领域模型是系统的核心,是领域内的业务的直接沉淀,具有非常大的业务价值;技术架构设计或数据存储等是在领域模型的外围,帮助领域模型进行落地;DDD切入点2-理解领域、拆分领域、细化领域理解领域知识是基础上面我们通过第一步,固然我们明确了要做一个什么样的系统,该系统主要解决什么问题,但是就这样我们还无法开场进行实际的需求分析和模型设计,我们还必须将我们的问题进行拆分,需求进行
10、细化。有些时候,需求方,即提出问题的人,很可能本人不清楚详细想要什么。他只知道一个概念,一个大的目的。比方他只知道要做一个股票交易系统,一个灰度发布系统,一个电商平台,一个开发工具,等。但是他不清楚这些系统应该详细做成什么样子。这个时候,我以为领域专家就非常重要了,DDD也非常强调领域专家的重要性。由于领域专家对这个领域非常了解,对领域内的各种业务场景和各种业务规则也非常清楚,总之,对这个领域内的一切业务相关的知识都非常了解。所以,他们自然就有能力表达出系统该做成什么样子。所以,要知道一个系统到底该做成什么样子,到底哪些是核心业务关注点,只能靠沉淀领域内的各种知识,别无他法。因而,假设你如今打
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浅谈 DDD 领域 驱动 设计 理解
限制150内