作家
登录

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

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

范畴驱动设计(DDD)告诉我们的最大年夜价值我认为是:当我们要开辟一个体系时,应当尽量先把范畴模型想清跋扈,然后再开端着手编码,如许的体系后期才会很好保护。然则,很多项目(尤其是互联网项目,为了赶工)都是一开端模型没想清跋扈,一上来就开端建表写代码,代码写的异常冗余,美满是过程是的思虑方法,最后导致体系异常难以保护。并且更糟糕的是,出来混老是要还的,前期的范畴模型设计的不好,不敷抽象,如不雅你的体系会经久须要保护和适应营业变更,那后面你必定会碰到各类问题保护上的艰苦,比如数据构造设计不合理,代码到处冗余,改BUG到处惹人新的BUG,新人对这种代码上手艰苦,等。而那时如不雅你再想重构模型,那要付出的价值会比一开端从新开辟还要大年夜,因为你还要推敲兼容汗青的数据,数据迁徙,若何腻滑宣布等各类头疼的问题。所以,就导致我们最后天天加班。

固然,我们都知道这个事理,然则我也明白,人的习惯很难改变的,大年夜部分人都很难大年夜面向过程式的想到哪里写到哪里的思惟改变为基于体系化的模型驱动的思维。我想,这或许是DDD很难在中国或国外风行起来的原因吧。然则,我想这不该该成为我们放弃进修DDD的原因,对吧!

概念总结:

  1. 范畴就是问题域,有界线,范畴中有很多问题;
  2. 任何一个体系要解决的那个大年夜问题都对应一个范畴;
  3. 经由过程建立范畴模型来解决范畴中的核心问题,模型驱动的思惟;
  4. 范畴建模的目标针对我们在范畴中所关怀的问题,即只针对核心存眷点,而不是全部范畴中的所有问题;
  5. 范畴模型在设计时应推敲必定的抽象性、通用性,以及复竽暌姑价值;
  6. 经由过程范畴模型驱动代码的实现,确保代码让范畴模型落地,代码最终能解决问题;
  7. 范畴模型是体系的核心,是范畴内的营业的直接沉淀,具有异常大年夜的营业价值;
  8. 技巧架构设计或数据存储等是在范畴模型的外围,赞助范畴模型进行落地;

DDD切入点2 - 懂得范畴、拆分范畴、细化范畴

懂得范畴常识是基本

膳绫擎这些中间看起来很天然,因为大年夜家对电子商务的┞封个范畴都已经异常熟悉了,所以都没什么疑问,似乎很天然的样子。所以,范畴划分是不是就是没什么挑衅了呢?显然不是。之所以我们认为阁下划分很简单,是因为我们半数个大年夜范畴异常懂得了。如不雅我们碰到一个冷门的范畴,就没办法这么轻易的去划分阁下了。这就须要我们先去尽力懂得范畴内的常识。所以,我小我大年夜来不信赖什么阁下划分的技能什么的器械,因为我认为这个工作没有任何诀窍可以应用。当我们不懂得一个器械的时刻,若何去拆解它?当我们半数个范畴有必定的熟悉了,懂得了范畴内的相干营业的本质和关系,我们就天然而然的能划搀扶合理的阁下了。不过并不是所有的体系都须要划分阁下的,有些体系执偾解决一个小问题,这个问题不复杂,可能只有一两个核心概念。所以,这种体系完全不须要再划分阁下。但不是绝对的,当一个范畴,我们的存眷点越来越多,每个存眷点我们存眷的信息越来越多的时刻,我们会不由自立的去进一步的划分阁下。比如,也许我们一开端将商品和商品的库存都放在商品中间里,然则后来竽暌股于库存的保护越来越复杂,导致揉在一路对我们的体系保护带来必定的艰苦时,我们就会推敲将两者进行拆分,这个就是所谓的营业垂直瓜分。

细化阁下

经由过程膳绫擎的两步,我们懂得了范呈攀里的常识,也对范畴进行了阁下划分。但如许还不敷,凭这些我们还无法进行后续的范畴模型设计。我们还必须再进一步细化每个阁下,进一步明白每个阁下的核心存眷点,即需求细化。我认为我们须要细化的方面有以下几点:

  1. 梳理范畴概念:梳理出范畴内我们存眷的概念、概念的关系,并同一交换词汇,形成同一说话;
  2. 梳理营业规矩:梳理出范畴内我们存眷的各类营业规矩,DDD中叫不变性(invariants),比如独一性规矩,余额不克不及小于零等;
  3. 梳理营业场景:梳理出范畴内的核心营业场景,比如电商平台中的参加购物车、提交订单、提议付款等核心营业场景;
  4. 梳理营业流程:梳理出范畴内的症毕营业流程,比如订单处理流程,退款流程等;

大年夜膳绫擎这4个方面,我们大年夜范畴概念、营业规矩、交互场景、营业流程等维度梳理了我们到底要什么,整顿了全部体系应当具备的功能。这个工作我认为是一个异常具有创造性和有难度的工作。我们一方面会主不雅的定义我们想要什么;另一方面,我们还会思虑我们要的器械的合理性。我认为这个就是产品经理的工作,产品经理必须要负起职责,把他的产品充分设计好,大年夜各个方面去推敲,若何设计一个产品,才能更好的解决用户的核心诉求,即范畴内的核心问题。如不雅对范畴不敷懂得,如不雅想不清跋扈用户到底要什么,如不雅思虑问题不敷周全,谈何设计出一个合理的产品呢?

关于范畴概念的梳理,我认为可以采取四色原型分析法,这个分析法经由过程体系的办法,将概念划分为不合的种类,为不合种类的概念标注不合的色彩。然后将这些概念有机的组合起来,大年夜而让我们可以清楚的分析出概念和概念之间的关系。有兴趣的同窗可以在网上搜刮下四色原型。

留意:膳绫擎我说的┞封四点,重点是梳理出我们要什么功能,而不是思虑若何实现这些功能,若何实现是软件设计人员的职责。

DDD切入点3 - 范畴模型设计

这部分内容,我想进修DDD的人都很熟悉了。DDD原著中提出了很多实用的建模对象:聚合、实体、值对象、工厂、仓储、范畴办事、范畴事宜。我们可以应用这些对象,来设计每一个阁下的范畴模型。最终经由过程范畴模型图将设计沉淀下来。要应用这些对象,起首就要懂得每个对象的含义和应用处景。不要认为很简单哦,比如聚合的划分就是一个异常具有艺术的活。同一个体系,不合的人设计出来的聚合是完全不合的。并且很有可能高手之间的最后设计出来的差别反而更大年夜,实际上我认为是世界不雅的互相碰撞,呵呵。所以,要范畴建模,我认为每小我都应当去学学哲学常识,这有助于我们更好的熟悉世界,更好的懂得事物的本质。


  推荐阅读

  性能优化知多少

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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