首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

反DDD模式之“复用”

编程知识
2024年09月21日 10:39

本文书接上回《反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

From:https://www.cnblogs.com/xiaoweiyu/p/18423776
本文地址: http://shuzixingkong.net/article/2176
0评论
提交 加载更多评论
其他文章 manim边学边做--空心多边形
空心的多边形Cutout是一种比较特殊的多边形,主要用于解决与形状、大小、位置等相关的数学问题。 Cutout多边形可以定义物体表面的空洞或凹陷部分,从而更准确地模拟现实世界中的复杂形状。 比如,在PCB(印制电路板)设计中,通过放置Cutout空心的多边形,设计师可以精确地控制铜的覆盖区域,从而优
manim边学边做--空心多边形 manim边学边做--空心多边形 manim边学边做--空心多边形
FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher
​EasyPusher是一款国产的RTSP直播录制推流客户端工具,它支持Windows、Linux、Android、iOS等操作系统。EasyPusher采用RTSP推流协议,其中安卓版EasyPusher的Github托管地址为https://github.com/EasyDarwin/EasyP
FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher
Apache-Shiro <=1.2.4 反序列化漏洞 (代码审计)
一、Apache Shiro 简介: Apache Shiro提供了认证、授权、加密和会话管理功能,将复杂的问题隐藏起来,提供清晰直观的API使开发者可以很轻松地开发自己的程序安全代码。并且在实现此目标时无须依赖第三方的框架、容器或服务,当然也能做到与这些环境的整合,使其在任何环境下都可拿来使用。
Apache-Shiro <=1.2.4 反序列化漏洞 (代码审计) Apache-Shiro <=1.2.4 反序列化漏洞 (代码审计) Apache-Shiro <=1.2.4 反序列化漏洞 (代码审计)
Shiro-认证绕过漏洞(CVE-2020-1957)
漏洞原理 核心点就是shiro和spring对uri进行配合匹配的时候有缺陷导致的,shiro中很轻易就能绕过,其次spring中对;分号好像情有独钟,被大牛们发现后也就一下子绕过了。 主流payload:/xxx/..;/admin/ 具体后台路由不一定是admin,得看情况而定,但是下面的分析都
Shiro-认证绕过漏洞(CVE-2020-1957) Shiro-认证绕过漏洞(CVE-2020-1957) Shiro-认证绕过漏洞(CVE-2020-1957)
socket close和shutdown的区别,TIME_WAIT和CLOSE_WAIT
TCP主动关闭连接&#160;appl: close(), --&gt; FIN FIN_WAIT_1 //主动关闭socket方,调用close关闭socket,发FIN &lt;-- ACK FIN_WAIT_2 //对方操作系统的TCP层,给ACK响应。然后给FIN &lt;-- FIN --
Nuxt Kit中的 Nitro 处理程序
title: Nuxt Kit中的 Nitro 处理程序 date: 2024/9/21 updated: 2024/9/21 author: cmdragon excerpt: 摘要:本文详细介绍了在Nuxt 3框架中使用Nitro服务器引擎的实践,包括创建处理程序处理HTTP请求、路由和中间件的
Nuxt Kit中的 Nitro 处理程序 Nuxt Kit中的 Nitro 处理程序
代码整洁之道--读书笔记(14)
代码整洁之道 简介: 本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。 本书适合所有程序员阅读,
代码整洁之道--读书笔记(14) 代码整洁之道--读书笔记(14)
一,初始 MyBatis-Plus
一,初始 MyBatis-Plus @目录一,初始 MyBatis-Plus1. MyBatis-Plus 的概述2. 入门配置第一个 MyBatis-Plus 案例3. 补充说明:3.1 通用 Mapper 接口介绍3.1.1 Mapper 接口的 “增删改查”3.1.1.1 查询所有记录3.1.
一,初始 MyBatis-Plus 一,初始 MyBatis-Plus 一,初始 MyBatis-Plus