八年实战经验,解读DDD思想内核

怎样让模型更接近业务的本质?DDD 提供了一些方法和辅助工具:

  1. 让领域专家参与建模(对这个业务最了解的人)
  2. 建立统一语言(Ubiquitous Language),消除认知差异
  3. 用业务行为来描述接口,不要用技术概念。以账户为例,开户、销户、冻结、解冻、修改注册信息、修改支付限额等都是业务行为,增删改查就属于技术概念
  4. 使用充血模型
  5. 使用 DP(Domain Primitive)而不是语言的基本类型。例如电话号码不要用 String 而用 PhoneNumber
  6. 还有一些建模方法做为辅助:四色建模法、事件风暴等

这些方法有些听起来挺抽象,但只要回归到原点:让模型尽量还原业务,你就不会再纠结于这些概念。

代码边界的处理:

  • 通过依赖倒置,从而避免技术细节影响业务逻辑,如引入 repository 层来解决
  • 定义业务上下文边界,即限界上下文。这有两种方式,一种防腐层(ACL:Anticorruption Layer),隔离两个服务,通过 RPC 或者 MQ 等机制进行服务间通信。另一种是共享内核(Shared Kernel),将两个服务相同部分抽取出来,但是容易出现共享内核变动引得两个服务都变动。

分类的处理

  • 参与者角度划分。用户、研发、财务、客服对于订单的看法是不同的。
  • 模型角度划分。基于类图(服务、实体、值对象)等,从而容易获得高内聚低耦合。
  • 风险隔离角度。
  • 组织架构角度。

难住了…一个从工作中抽象出来的算法题

题目是这样的:给定多个已经排序好的数组(从小到大),在每个数组中挑选一个数字,计算这些数字的方差。请找出方差最小的数字组合(可能有多个),并输出方差。举例:[1,3,4,6,7,100 ][28,50,70,102 ][14,76,98 ] 选择的数字组合应该是 100,102,98。方差是 2.67,要求性能尽可能的高,避免暴力穷举。

看着最不错的是:先合并有序数组,O(N),同时纪录合并后有序数组的源数组的 index(染色);然后开始滑动窗口,使得窗口内染色数等于数组数,滑的时候更新方差。

K8s里我的容器到底用了多少内存?

理解Go协程调度的本质

高性能Gin框架原理学习教程

年久失修的大厂系统如何做迁移?

一文带你看懂Golang最新特性

消息队列选型看这一篇就够了

高性能亿级录制列表查询系统设计实践

从零开始了解推荐系统全貌

多线程读写锁产生死锁的故障解决方案
Golang RLock 不支持重入导致协程泄露

节省 90% 存储!源码级揭秘腾讯云 ES 向量搜索的优化之道
大模型Prompt技巧全解析

DeepSeek

Title Unavailable | Site Unreachable

Deepseek 关键技术解析

AI 框架

大模型开发工作手册详细指南

Cursor

最新AI叛变!除了祈祷,程序员还能做什么?

GitHub 等地方有很多开源的 Cursor 的 rulefiles。但是有些黑客会在 rulefiles 中配置 unicode 不可见字符,从而进行配置文件投毒。下载导入也是直接放入到隐藏文件夹下,因此很少会去判断文件是否可信。进而在生成的代码中可能出现不合理的代码逻辑。

“聊天式编程”让代码听你的话:Cursor打造极致心流体验