实战中的DDD:不知DDD,却早已在DDD

48 阅读4分钟

实战中的DDD:不知DDD,却早已在DDD

——结合道家思想的技术演进思考


✨ 引言

很多人学 DDD(领域驱动设计)是因为看了书、视频、别人的推荐。但我却是在没有读过 DDD 书籍的前提下,靠真实业务压力与架构演进,走出了一条“道法自然”的 DDD 实践之路。

直到后来再读 DDD 的书籍时,我才猛然发现:

原来我早就在用 DDD,只是不知道它叫这个名字。

这篇文章不讲术语堆叠,不讲框架套娃,而是结合我自己的物联网平台实践与道家哲学,来聊聊:
如何在真实项目中走出属于自己的 DDD 之路


🧭 一、技术的原点,不是框架,是业务

技术选型从来不是出发点,业务才是

我做过一个典型的物联网平台:百万级设备、低频通信、高并发接入,对延迟和资源消耗都极为敏感。

主流做法是:

  • 套用微服务架构
  • Kafka + Redis + EMQX + 网关 + 各类服务拆分
  • 一堆中间件依赖 + 十几台服务器托底

我没这么做。我选择了:

  • 自研 Netty 协议栈,支持 MQTT、TCP、UDP
  • 单体架构,逻辑清晰,接口职责分明
  • 插件式业务链,支持热插拔与多租户隔离
  • 平台即网关,无需边缘网关、中间件

结果?

一个 JAR 包 + 一个数据库 + 一个 Nginx,稳定接入数万设备,两台服务器轻松应对。

不是“反主流”,而是“顺业务”。


☯️ 二、“道生一”:从哲学角度看架构分层

老子《道德经》曰:

“道生一,一生二,二生三,三生万物。”

这与 DDD 的战略思想高度契合:

道家哲学架构设计含义
道生一明确系统使命与核心目标
一生二划分核心域与支撑域
二生三建模为实体、值对象、服务等
三生万物生成系统、接口、模块运行体

在物联网平台项目中,我并不是先想着“责任链”、“策略模式”,而是先问自己:

  • 每个租户最核心的业务目标是什么?
  • 如何让协议数据自动流转到业务链?
  • 如何隔离业务流、热更新规则?

这些问题的思维过程,本质上就是 DDD 所倡导的:
统一语言、限界上下文、领域建模。


🔧 三、从战术出发,却走入战略

为每种通信服务(MQTT、TCP、UDP)设计 CodecRouterHandlerPipeline,其实就是:

  • 聚合根建模
  • 领域服务分离
  • 策略分发与路由调度

为每个租户构建独立业务链:

  • 支持热更新、阻塞控制、规则替换
  • 支持差异化配置重载
  • 插件式业务 handler 链组合

这些能力,在传统微服务里依赖大量框架支撑,而在我这里的单体架构中,自然而然达成,因为一切从业务出发


🔄 四、DDD ≠ 框架,DDD 是“觉悟”

很多人误解 DDD,以为是:

  • 构建 Entity/VO/Repository
  • 使用某个 DDD 框架
  • 分层越多越专业

但 DDD 真正的核心是:

让技术服务业务,而不是业务去适配技术。

正如《道德经》:

“人法地,地法天,天法道,道法自然。”

架构设计的最高境界,是顺其自然,合于道法。不是为了“DDD”而DDD,而是业务走到了那个点,自然就会出现那种抽象与设计。


🧩 五、我做对了什么?

  • ✅ 没有一上来就堆框架,而是围绕业务目标“做减法”
  • ✅ 没有为“微服务”而微服务,而是以瓶颈为界做拆分
  • ✅ 没有依赖中间件,而是用可控组件替代冗余依赖
  • ✅ 没有死套DDD,而是自然抽象出领域模型与服务

所以我常说:

“不知DDD,却早已在DDD。”


✍️ 结语:大道无形,唯有体验

如果你也正走在架构演进的路上,请记住一句话:

不要急着动手设计系统,先把“道”想清楚。

技术没有高低,框架也不是圣经,唯有业务是真实的、确定的。你的架构设计,最终要落到一个点:

  • 更高效
  • 更稳定
  • 更贴近业务
  • 更易演进

当你真正沉下心来思考业务时,DDD 自会浮现,而你,也就真正踏上了属于你的“领域之道”。


喜欢本文,欢迎点赞 👍 收藏 ⭐ 关注 🔔,更多原创技术思考持续更新!