作家
登录

浅谈我对DDD领域驱动设计的理解

作者: 来源: 2017-07-14 15:01:15 阅读 我要评论


大年夜碰到问题开端

【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路!

当人们要做一个软件体系时,一般老是因为碰到了什愦问题,然后欲望经由过程一个软件体系来解决。

比如,我是一俭朴业,然后我认为我如今线下发卖本身的产品还不敷,我欲望可以或许在线上也能发卖本身的产品。所以,天然而然就想到要做一个通俗电商体系,用于实如今线发卖本身企业产品的目标。

膳绫擎我们经由过程第一步,固然我们明白了要做一个什么样的体系,该体系重要解决什愦问题,然则就如许我们还无法开端进行实际的需求分析和模型设计,我们还必须将我们的问题进行拆分,需求进行细化。有些时刻,需求方,即提出问题的人,很可能本身不清跋扈具体想要什么。他肮脏道一个概念,一个大年夜的目标。比如他肮脏道要做一个股票交易体系,一个灰度宣布体系,一个电商平台,一个开辟对象,等。然则他不清跋扈这些体系应当具体做成什么样子。这个时刻,我认为范畴专家就异常重要了,DDD也异常强调范畴专家的重要性。因为范畴专家对这个范畴异常懂得,对范畴内的各类营业场景和各类营业规矩也异常清跋扈,总之,对这个范畴内的一切营业相干的常识都异常懂得。所以,他们天然就有才能表达出体系该做成什么样子。所以,要知道一个体系到底该做成什么样子,到底哪些是核心营业存眷点,只能靠沉淀范畴内的各类常识,别无他法。是以,假设你如今计举动当作一个电商平台,然则你对这个范畴没什么懂得,那你必定得先去懂得下该范畴内主流的电商平台,比如淘宝、天猫、京东、亚马逊等。这个懂得的过程就是你沉淀范畴常识的过程。如不雅你不懂得,就算你范畴建模的才能再强,各类技巧架构才能再强也是使不上力。范畴专家不是某个固定的角色,而是某一类人,这类人对这个范畴异常懂得。比如,一个开辟人员也可所以一个范畴专家。假设你在一个公司开辟和保护一个体系已经好几年了,然则这个体系的产品司收成PD)可能已经换过好几任了,这种情况下,我信赖这几任产品经理都没有比你更熟悉这个范畴。

拆分范畴

再比如,我是一家互联网公司,公司有很多体系对外供给办事,面向很多客户端设备。然则比来因为各类原因,导致办事经常出故障。所以,我们欲望经由过程各类办法进步办事的质量和稳定性。个中的一个办法就是欲望能做一个灰度宣布的平台,这个平台可以供给灰度宣布的办事。然后,当某个营业体系做了一些修改并须要宣布时,可以应用我们的灰度宣布平台来异常便利的实现灰度宣布的功能。比如在灰度宣布平台上便利的定制许可哪些特定的客户端才会拜访新办事,哪些客户端持续应用老办事。灰度宣布平台可以供给各类灰度的策略。有了如许的灰度宣布机制,那即便体系的新逻辑有什愦问题,受影响的面也不会很大年夜,在可控范围内。所以,如不雅公司里的所有对外供给办事的体系都接入了灰度平台,那这些体系的宣布环节就可以加倍有保障了。

总之,我们做任何一个软件体系,都是有原因的,不然就没须要做这个体系,而这个原因就是我们碰到的问题。所以,通干预干与题,我们就知道了我们须要一个什么样的体系,这个体系解决什么样的问题。最后,我们就很天然的得出了一个目标,即知道了本身要什么。比如我要做一个论坛、一个博客体系、一个电商平台、一个灰度宣布体系、一个IDE、一个分布式消息队列、一个通信框架,等等。

DDD切入点1 - 懂得概念

是以,我们可以揣摸出,一个范畴本质上可以懂得为就是一个问题域,只如果同一个范畴,那问题域就雷同。所以,只要我们肯定了体系所属的范畴,那这个体系的核心营业,即要解决的关键问题、问题典范围界线就根本肯定了。平日我们说,要成为一个范畴的专家,必须要在这个范畴深刻研究很多年才行。因为只有钠揭捉?究了很多年,你才会碰到异常多的该范畴的问题,同时你解决这个范畴中的问题的经验也异常丰富。很多时刻,范畴专家比技巧专家加倍吃喷鼻,比如金融范畴的专家。

什么是设计(Design)?

DDD的全称为Domain-driven Design,即范畴驱动设计。下面我大年夜范畴、问题域、范畴模型、设计、驱动这几钢词语的含义和接洽的角度去阐述DDD是若何融入到我们日常平凡的软件开辟初期阶段的。要懂得什么是范畴驱动设计,起重要懂得什么是范畴,什么是设计,还有驱动是什么意思,什么驱动什么。

什么是范畴(Domain)?

前面我们已经清跋扈的知道我们如今要做一个什么样的体系,这个体系须要解决什愦问题。我认为任何一个体系都邑属于某个特定的范畴,比如论坛是一个范畴,只要你想做一个论坛,那这个论坛的核心营业是肯定的,比如都有效户发帖、回帖等核心根本功能。比如电商平台、通俗电商体系,这种都属于网上电商范畴,只如果这个范畴的体系,那都有商品浏览、购物车、下单、减库存、付款交易等核心环节。所以,同一个范畴的体系都具有雷同的核心营业,因为他们要解决的问题的本质是类似的。

DDD中的设计重要指范畴模型的设计。为什么是范畴模型的设计而不是架构设计或其他的什么设计呢?因为DDD是一种基于模型驱动开辟的软件开辟思惟,强调范畴模型是全部体系的核心,范畴模型也是全部体系的核心价值地点。每一个范畴,都有一个对应的范畴模型,范畴模许可以或许很好的帮我们解决复杂的营业问题。

大年夜范畴和代码实现的角度来懂得,范畴模型绑定了范畴和代码实现,确保了最终的代码实现就必定是解决了范畴中的核心问题的。因为:1)范畴驱动范畴模型设计;2)范畴模型驱动代码实现。我们只要包管范畴模型的设计是精确的,就能肯定范畴模许可以解决范畴中的核心问题;同理,我们只要包管代码实现是严格按照范畴模型的意图来落地的,那就能包管最后出来的代码可以或许解决范畴的核心问题的。这个思路,和传统的分析、设计、编码这几个阶段被割裂(并且每个阶段的产品也不合)的软件开辟办法学形成光鲜的比较。

什么是驱动(Driven)?

膳绫擎其实已经提到了,就是:1)范畴驱动范畴模型设计;2)范畴模型驱动代码实现。这个就和我们传统的数据库驱动开辟的思路形核比较了。DDD中,我们老是以范畴为界线,分析范畴中的核心问题(核心存眷点),然后设计对应的范畴模型,再经由过程范畴模型驱动代码实现。而像数据库设计、持久化技巧等这些都不是DDD的核心,而是外围的器械。


  推荐阅读

  性能优化知多少

【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! 1. 引言比来一段时光,体系新版本要宣布,在beta客户测试时代,裸露了很多问题,除了一些营业和异常问题外>>>详细阅读


本文标题:浅谈我对DDD领域驱动设计的理解

地址:http://www.17bianji.com/lsqh/36227.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)