学习理财博客空间

理财鱼

您现在的位置是:理财鱼 > 理财方法 >

理财方法

如何从0到1实践DDD

发布时间:2021-12-15 17:33理财方法 评论

理财鱼小提示:如何从0到1实践DDD

编辑导语:DDD(Domain-driven design,领域驱动设计)是一种架构设计方法论,通过边界划分,将复杂业务领域简单化,帮助我们设计出清晰的领域和应用边界,保证业务模型与代码模型的一致性。本文作者结合实际经验,介绍了如何从0到1实践DDD,一起来看看吧。

 如何从0到1实践DDD

随着业务的不断发展,我们发现自己的系统开始变得有点臃肿,为了减少复杂性,我们尝试借助DDD来改善我们的系统。本文记录了自己对DDD的理解和实践过程,欢迎大家一起探讨。见识所限,难免有理解不到位,希望路过的大佬不吝赐教。

一、为什么需要DDD

当朋友和你聊工作时,你能否一语中的,说清你在开发中的业务内容及其价值?

当产品和你聊需求时,你是否遇到过反复沟通之后才发现讲的不是同个东西的情况?

当你在做需求评估时,你是否经常发现一个小的需求改动,总是牵一发动全身?

当你在快乐写代码时,你是否经常觉得有些类可有可无,有些接口望文不知义?

如果你有以上的一些疑问,那你可以试试领域驱动设计:

DDD(Domain-driven design,领域驱动设计)是一种架构设计方法论,通过边界划分,将复杂业务领域简单化,帮助我们设计出清晰的领域和应用边界,保证业务模型与代码模型的一致性。

在细看这个定义之前,我们可以思考一下,为什么我们的业务系统会慢慢变得复杂?

常见的情况是,业务在发展过程中为了探寻发力点,需要不断地试错迭代,调整方向,而系统在设计之初,难以预期到后面的瞬息万变,为了应付业务,修修改改,久之,系统也变得复杂起来。

可以怎么办呢?及时重构呗——不改变软件系统外部行为的前提下,改善它的内部结构。

然而重构是从技术层面上抽炼出来的模型,往往不具有实际的业务含义,其他同学可能难以自然地将业务问题映射到对应的设计模型。另外,如果不能如实映射业务模型,随着业务方向调整,代码可能又开始腐败……有点像芝诺悖论中,阿基里斯永远追不上小乌龟。

 如何从0到1实践DDD

那DDD怎么搞?

DDD是这么想的:”将业务架构映射到系统架构上,在响应业务变化调整业务架构时,也随之变化系统架构”。可能大家平时有这样的想法,但是比较模糊,未形成体系,而DDD就提供了一套完整的方法论。从业务角度去审视我们的系统,从而实现高内聚低耦合的代码。

整体而言,领域驱动设计包括战略建模和战术建模: 战略设计侧重于高层次、宏观上去划分和集成限界上下文,而战术设计则关注更具体使用建模工具来细化上下文。

二、 如何实现DDD之战略建模 1. 基本概念

1)领域、子域

在讨论问题之前,我们需要先定义好问题。

领域即问题域,通常是根据一个组织所处的行业进行识别,它基于业务的愿景,定义了系统要解决的现实问题的目标和范围。领域越大,业务的范围也越大,大的领域可以拆分成小的问题域,称之为子域。根据子域重要性和功能属性划,可以将其分为三类。

核心域、支撑域和通用域:

核心域:决定产品核心竞争力的子域

支撑域:实现核心域目标所需的,但重要程度不如核心域的子域,一般具备强烈的个性化需求

通用域:具有通用功能,可被多个子域使用的的是通用域。该子域所解决的问题一般是业界常见问题,有成熟的解决方案,可直接购买或简单修改来使用

这个几个概念其实很容易理解,不过在划分的时候,注意要从业务的视角,而不是技术功能模块来划分。

2)限界上下文

我们语言博大精深,同样的话在不同语境下就可演变出不同含义,这在沟通时总是带来不必要的麻烦。为了准确地沟通,我们需要统一语言的边界,在相同的语言边界内沟通,才不容易出差错。

一则阿凡提当理发师惩罚一个狡猾牧师的趣事:理发时,阿凡提刮脸时问牧师:“牧师,是否要眉毛?”牧师答:“这还用问,眉毛岂能不要?”.“好,你要我就给你!”,说着就把牧师的眉毛刮下来递到他手里,牧师气得说不出话来,谁叫自己说要呢。阿凡提又问:“牧师,胡子要吗?”.“不要,不要!”牧师连忙说。“好,你不要就不要。” 嗖嗖几刀就把牧师的胡子刮下来。

在一个系统中,一个名词在不同语境可能有不同的含义,我们对它关注的属性和行为也有所不同。例如,在电商系统中,对于产品Product, 在采购上下文,需要关注产品的进价、最小起订量与供货周期;在市场上下文中,则关心产品的品质、售价,以及用于促销的精美图片和销售类型;在仓储上下文中,仓库工作人员更关心产品放在仓库的哪个位置,产品的重量与体积,是否易碎品以及订购产品的数量。

限界上下文在《实现领域驱动设计》中,用了很大篇幅去讲,它有几个重要的意义:

限界上下文是领域概念的语言边界与业务边界:在这个边界内,领域概念的内涵是清晰、无歧义的

限界上下文是团队的工作边界:组织边界与限界上下文对齐

限界上下文是技术方案的实施边界:在这个边界内,技术方案是独立自治的,业务逻辑不会落入不同技术边界的间隙

经过战略建模之后,我们可以得到以下的一个模型:

 如何从0到1实践DDD

2. 业务实践

为了更好地理解,我们对手上的一个项目:“IoT设备增值产品管理系统”进行实践。该项目中,我们提供给商户在IoT设备上管理增值运营产品的能力。这里的IoT设备主要是微信支付刷脸设备等。商户可以在系统中创建我们业务中的增值运营产品,如电子海报、互动海报等,创建完之后,相关的增值产品会被投放到IoT设备上,进行展示、运作:

 如何从0到1实践DDD

 如何从0到1实践DDD

一开始我们从业务的用例出发,认为我们的系统主要是商户在我们页面网站使用,以及IoT设备通过接口连接我们后台服务,认为这两个分属不同的子域,然后梳理了一些支撑的功能:

 如何从0到1实践DDD

共3页: 上一页下一页

>相关《 如何从0到1实践DDD》内容:


1、 「盘中宝周回顾」震荡行情如何解局?看VIP“大浪淘沙”精选优质资讯

理财鱼小提示:「盘中宝周回顾」震荡行情如何解局?看VIP“大浪淘沙”精选优质资讯 「盘中宝周回顾」震荡行情如何解局?看VIP“大浪淘沙”精选优质资讯 截至12月24日(本周五),上证指数今年上涨4.17%,深证成指今年上涨239点,年涨幅为1.66%,创业板指数今年涨...【继续阅读】


2、 碧桂园实践精益管理:建筑机器人助力“碳中和”聚焦产品力赋能高质量发展

理财鱼小提示:碧桂园实践精益管理:建筑机器人助力“碳中和”聚焦产品力赋能高质量发展 记者 黄婉银 当前房地产市场面临周期调整,各个房企都在寻找降本增效的秘密,逐步强调:向管理要效益、强品质提溢价、精运营降成本、细生产省时间等等。 各个房企纷纷向制...【继续阅读】


3、 【盘中宝周回顾】震荡行情如何解局?看VIP“大浪淘沙”精选优质资讯

截至12月24日(本周五),上证指数今年上涨4.17%,深证成指今年上涨239点,年涨幅为1.66%,创业板指数今年涨幅最大,目前年涨幅为11.15%。由于距2021年股市收官只剩下最后一周,即使盘面下周震荡,三大股指年线收阳依旧为大概率事件。 从行业来看,申万一...【继续阅读】