首页 > 其他分享 >反DDD模式之“复用”

反DDD模式之“复用”

时间:2024-09-21 11:35:28浏览次数:8  
标签:场景 复用 接口 模式 耦合 我们 DDD

本文书接上回《反DDD模式之关系型数据库》,关注公众号(老肖想当外语大佬)获取信息:

  1. 最新文章更新;

  2. DDD框架源码(.NET、Java双平台);

  3. 加群畅聊,建模分析、技术实现交流;

  4. 视频和直播在B站。

背景

在我们软件开发过程中,“复用接口(webapi)”、“复用服务(service)”是非常常见的现象,很多老司机都会为自己设计的代码可以“复用”而感到有成就感。然而当我们在一个较长的时间周期去看待系统的迭代过程,会发现这些“复用”,往往会成为后来迭代的绊脚石,修改代码牵一发而动全身,细微的修改也会引发广泛的影响面,从这个角度看,“复用”是不利于系统的可维护性的。

今天我们就来深度探讨一下“复用”和DDD之间的关系,打开一个不同的视角。

复用的本质

下图展示了一个非常典型的复用例子,不少开发者习惯提供一个“保存接口”来满足“创建”和“编辑”场景:

按照我们的惯例,“连线”代表着“耦合”,所以“复用”接口,本质上就是把不同的业务场景耦合在了一起,当一个场景发生变化时,同时会影响到其它场景。

进一步地推导,两个元素的耦合即打破它们的边界,它们因为耦合而成为了一个更大的整体:

而DDD的价值观是保持明确的边界,打破边界则与之完全相反,因此可以得出打破边界即反DDD:

把上面的推导过程整合在一起就是下图这样:

去掉中间过程,最终我们得出标题的的结论“复用”是一种“反DDD模式”:

限定条件

另外一方面,“复用”一词的含义还是比较广泛的,例如我们有两个系统,A系统和B系统都调用某家的“支付接口”,这算不算复用“支付接口”呢?在我们今天讨论的角度看,这不算复用,因为都是“支付场景”调用“支付接口”,场景其实是同一个。

那么我们需要限定一下范围,这里探讨的复用是指:为不同的场景或者目的所做的复用。基于这个范围我们可以看到一些典型的复用案例:

  • RestfulAPI复用

  • 后端服务复用

  • 业务中台复用

而这些场景,我相信很多老司机都有过痛彻心扉的体验,复用一时爽,迭代火葬场。

不要复用

基于前面推导的认知,我们知道复用作为反DDD模式,并不会为我们带来价值,反倒会使得系统丧失可维护性,因此我们在实践DDD过程中总结了一些原则,其中重要的部分就是“不要复用”:

  • 为每个前端场景创建一个API;

  • 为每个API创建各自的输入输出实体(RequestDto、ResponseDto);

  • 为每个操作创建各自的命令(Command);

下面贴出DDD原则的文档和截图:

https://netcorepal.github.io/netcorepal-cloud-framework/rules-of-ddd/rules-of-ddd/

实战项目

目前开源DDD实战项目d3shop已经启动了,你可以自由地参与需求讨论、建模设计、代码贡献中来,我们每周都会针对模型设计、代码做直播评审和连麦讨论,从而帮助你更沉浸地体验DDD实践带来的成长和收益。

项目代码:https://github.com/netcorepal/d3shop

标签:场景,复用,接口,模式,耦合,我们,DDD
From: https://www.cnblogs.com/xiaoweiyu/p/18423776

相关文章

  • 公私域互通下的新商机探索:链动2+1模式、AI智能名片与S2B2C商城小程序的融合应用
    摘要:在数字化时代,公私域流量的有效融合已成为企业获取持续增长动力的关键。本文旨在探讨如何通过链动2+1模式、AI智能名片以及S2B2C商城小程序源码的综合运用,实现公私域流量的高效互通,进而为门店创造巨大商机。通过分析这些工具的特点、作用机制及其实施策略,本文为企业在复杂多......
  • 私域电商:自主发展新路径与创新模式融合
    摘要:本文深入探讨了私域电商相较于传统电商在自主权方面的优势,并结合AI智能名片、链动2+1模式以及商城小程序等创新元素,阐述了私域电商如何为商家提供更大的发展空间和自主权,以及这些创新模式在私域电商中的应用价值,为商家在数字化时代的商业发展提供新的思路和策略。一......
  • 0915,SOCKET网络编程部分,三种I/O多路复用模型(select ,poll,epoll)
    目录  nc127.0.0.1port01_socket_client.cc01_socket_server.cc02_select_client.cc02_select_server.cc03_poll_server.cc04_epoll_server.cc01_socket_client.cc#include<stdlib.h>#include<string.h>#include<sys/stat.h>#include<sy......
  • 常见的设计模式
    单例模式(饿汉和懒汉)//饿汉式单例模式includeusingnamespacestd;classson{public:son(constson&)=delete;son&operator=(constson&)=delete;son(constson&&)=delete;son&operator=(constson&&)=delete;staticson&getinsta......
  • 【Webpack】三种模式详解
    文章目录一、Webpack模式概述1.模式的作用2.配置模式二、开发模式(development)1.开发模式的特点开发模式的主要特点包括:2.开发模式的配置3.开发模式的实际应用三、生产模式(production)1.生产模式的特点生产模式的主要特点包括:2.生产模式的配置3.生产模式的实......
  • stm32 PWR电源控制(修改主频&睡眠模式&停机模式&待机模式)
    理论1.PWR简介PWR(PowerControl)电源控制PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到PVD阀值之上时,PVD会触发中断,用于执行紧急关闭任务低功耗模式包括睡眠模......
  • STM32F407单片机编程入门(九)低功耗模式实战含源码
    文章目录一.概要二.STM32单片机低功耗基本介绍三.STM32F407单片机待机模式介绍四.CubeMX配置一个待机低功耗例程五.CubeMX工程源代码下载六.小结一.概要在生活中通过关掉电器组件可以实现省电节能的目的,同样的道理单片机也可以通过这种方法实现降低功耗。单片机是由......
  • 23种设计模式,纯简单理解,面试必备
    文章目录创建型设计模式1.单例设计模2.工厂设计模式3.抽象工厂设计模式4.建造者设计模式5.原型设计模式结构型设计模式1.适配器设计模式2.桥接设计模式3.组合设计模式4.装饰器设计模式5.外观设计模式6.享元设计模式7.代理设计模式行为型设计模式1.访问者设计模式2.模板......
  • 【理论篇】数据挖掘 第六章 挖掘频繁模式、关联和相关性:基本概念和方法(上)
    说明:文章为《数据挖掘:概念与技术原书第03版》的学习笔记,该书是数据挖掘领域的经典之作,想了解更多内容请参阅原著。一、频繁模式基本概念        模式:通常指的是数据中的一种规律、趋势或特征,可以是单一的特征、属性,也可以是多个特征之间的关系或组合;      ......
  • 社区团购为何成为零售新风口?团批模式如何颠覆传统零售?
    在零售业竞争白热化的今天,商家们纷纷转向社区团购与团批模式寻求突破。这一模式凭借高效的供应链体系和独特的商业模式,不仅降低了运营成本,还精准对接了消费者的日常需求。社区团购利用社区场景和社交网络的强大传播力,将居民需求汇聚成批量订单,再由团长或自提点精准分发,有效解决了最......