大家好,欢迎来到Tlog4J课堂,我是Jensen。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、网站空间、营销软件、网站建设、济阳网站维护、网站推广。
今天给大家分享一篇DDD领域建模实战,结合我个人三年来的DDD实践经验,以企业级电商项目DDD领域设计为出发点,希望能给到大家对DDD的一些启发。
我会从DDD领域分析、DDD设计呈现、领域建模实际案例来展开说明,后面会有彩蛋给到大家~
话不多说,咱们开始DDD之旅吧~
讲DDD之前,咱们得了解一些基本概念,大家都知道DDD指的是领域驱动设计(Domain-Driven Design),那怎么理解DDD呢?
DDD是一个事件风暴(分类划分),进而知道组织划分(中台)、系统划分(微服务)、代码划分/设计的思想方法。
这么理解可能比较抽象,其实它的本质就是:通过将复杂问题简单化,分而治之,降低复杂度。
DDD的出现,契合了当今流行的微服务架构,微服务架构有个特别重要的命题——如何合理划分微服务,而DDD的战略设计完全可以作为微服务划分的依据。
我们讲DDD,它其实是包括了战略设计和战术设计,那他俩有啥区别呢?
这两者谁更重要呢?我认为,战略设计比战术设计更加重要。
在实际生产中,业务会越来越复杂,代码也会越垒越庞大,如果业务没有经过划分,表设计也没有经过划分设计,最后系统将变成一个庞大的单体应用,叠加需求修改代码的时候将会牵一发而动全身。
如果业务经过战略设计合理去划分,每个业务的业务边界会显得特别清晰,即使我们的代码没有使用DDD的思想去完成搭建,即使我们还是使用传统的MVC架构,也不会影响业务正常运作,战略设计是连接产品需求与开发代码的一道桥梁。
那领域驱动的战略设计应该如何分析呢?我们不需要独自去摸索,总结前辈的一些经验即可:
那么,领域驱动战术设计应该如何落地呢?我认为,考虑两个大方向即可:
至此,我们了解清楚了DDD的一些基本概念,那DDD为什么对我们如此重要呢?
我认为,DDD可以指导我们业务设计,指导我们代码落地,使得维护变得更简单。
这就是DDD对我们的重要意义,我们不能只以开发视角去看待业务问题,那样的话就会陷入开发思维陷阱,这对我们的业务成长没有任何帮助。
接下来,咱们来回顾一下,DDD有哪些核心要素——
领域(Domain)
领域是指在特定的范围或边界内要解决的业务问题域,它的核心思想是将业务问题域逐级细为子域/核心域/通用域/支撑域,降低业务理解和系统实现的复杂度。
聚合(Aggregate)
聚合内包括聚合根、实体、值对象,DDD中的聚合是不等同于UML中的聚合的,我们使用充血模型设计领域模型的属性、行为,并识别聚合与聚合根。
值得注意的是,一个微服务最小不要小于一个聚合,避免引入分布式事务的复杂度。
限界上下文(Bounded Context,简称BC)
业务的通用语言有它的业务边界,我们不大可能用一个简单的术语没有歧义地去描述一个复杂的业务领域,BC就是用来细分领域,从而定义通用语言所在的边界。
BC包含一个或多个聚合,按业务领域概念划分到不同BC,对应Java代码层面就是顶层包目录结构。
BC之内高内聚,一个业务行为在BC内尽量使用线程级别的交互,以保证ACID;BC之间低耦合,可作为微服务设计和拆分的依据,当然,微服务的拆分粒度还需要结合企业运维的能力。
BC之间最好采用领域事件进行交互,或者引入“翻译器”(或者说防腐层)进行通讯,保持BC间的松耦合。
DDD的核心要素就这三个,搞懂这三个要素,咱们就可以开始搞很多事情了。
当然,领域建模的一些难点咱们也要有所了解,比如:
在我们接到需求的时候,会在脑子里把实现的代码过一遍,这对于简单的CRUD来说并不难,但是涉及到更复杂的业务,一个场景就够我们沟通很久才能说清楚,那怎么办呢?
其实很简单,我们需要一个载体,去把思考的过程沉淀下来,等到产品经理来找我们加需求评估影响范围的时候,新人入职给他讲解业务的时候,通过这个载体就能直观地呈现出来,这就是DDD设计呈现的魅力所在。
这里我以我个人用得比较顺手的四色建模法作为DDD的设计呈现。
四色建模法是对领域模型的一种分析方法论,关注点是领域模型的归类,它是一种呈现方法。
四色原型延生于90年代,最先由Peter Coad和Mark Mayfield提出[Coad92],然后由David North拓展[Coad95-97],是一种被广泛使用的系统分析方法。
使用四色建模法设计出来的四色图,它所表达的类图是一种包含顺序图的完全动态图,它是立体多维的,有异于完全静态的数据库ER图。
那四色原型具体是哪四色呢?我们一起来看看:
表示事物在某个时刻或某一段时间内发生的,如销售订单、客户账单、收款记录等,使用浅红色表示。
表示参与扮演不同角色的人或事物,如商品、账户、店铺等,使用浅绿色表示。
抽象了一种参与方式,由人或组织机构、地点或物品来承担,如客户、商家、仓储团队、财务组织等,使用浅黄色表示。
属于资料类型的资源、目录式的种类性质对象,或者可以被其他原型反复使用的,如商品类目、支付方式、方法值对象等,使用浅蓝色表示。
接下来,咱们使用四色建模法来分析领域模型,总共分为四大步:
这里咱们需要注意的是,整个过程会穿插着原型之间关系/核心交互的标注,我们来看一幅电商DDD的四色图案例:
如下图所示,这是财务领域模型和支付中心模型的一部分,这里只描述了业务系统是如何运作起来的,并没有涉及表的具体字段设计,全量的模型图因涉及敏感信息不作详细展示:
领域建模就是这么个建模,这里我提一些设计细节:
领域模型图就像代码一样,需要我们长期去维护的,不是说做完设计就不去管了,这一点很重要,微服务负责人一定要有这个意识。
关于DCI建模和DCI架构我会继续深入研究,DCI这块就留到下次再分享叭~
分享一个Pro****On在线画图平台永久白嫖使用的方法:
我个人一直都在使用Pro****On在线画图平台,因为它可以画脑图和各种UML图,支持在线协作,也支持在线图片嵌入站外(如WIKI)。
当然,它还是一个学习设计的比较开放的平台,你可以去它的海量模板库克隆别人的图,看看别人是怎么做软件设计的,你也可以把自己画得贼6的图付费发布出去,体验一下知识变现的乐趣,记得要脱敏哦~
好了,这次的DDD领域建模实战课就到这里,你学会(fei)了吗?
标题名称:一篇带给你DDD领域建模实战
路径分享:http://www.mswzjz.cn/qtweb/news47/551147.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能