惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
爱范儿
爱范儿
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 叶小钗
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
博客园 - 司徒正美
博客园 - 【当耐特】
IT之家
IT之家

博客园 - delphi中间件

array of TVarRec core.recordModel.pas 使用泛型序列结构体 DDD建模指导 rabbitMQ VS mqtt redis流的应用场景 redis消费者组 redis流的操作命令 业务规则和模型 限界上下文与统一语言 领域驱动 mqtt即时通讯 ActiveRecord ORM RAD(速成应用开发) unigui插件框架 工厂流水线式自动生产UNIGUI WEB软件 delphi cs\web一种统一的界面风格 - delphi中间件 - 博客园 动态生成unidbgrid 单据工厂 用json元数据填充模板 mormot2 ORM rest vs jsonrpc SSE技术详解:使用 HTTP 做服务端数据推送应用的技术 http持久连接 json-rpc 2.0 MCP服务器 RTTI对性能的影响 频繁地创建和销毁对象 TMultiPartFormData 雪花ID
领域服务与领域事件
delphi中间件 · 2026-07-20 · via 博客园 - delphi中间件

领域服务(Domain Service)

一、为什么需要它

绝大多数业务逻辑都应该放进实体或值对象。但有些逻辑天生不属于任何一个对象,硬塞进去会很别扭。

例:"用某张优惠券,计算订单能减多少钱"。这个逻辑同时涉及订单优惠券两个聚合,它既不该属于 Order(订单不该懂优惠券的所有规则),也不该属于 Coupon(优惠券不该懂订单结构)。这种跨多个聚合的、无状态的业务逻辑,就放进领域服务

判断口诀:一个操作如果"不属于任何一个实体/值对象,且涉及多个领域对象的协调",就用领域服务。但要克制——能放进实体的,绝不放领域服务,否则又退回贫血模型。

领域事件(Domain Event)—— 解耦利器

一、大白话:什么是领域事件

领域事件 = "业务上已经发生的、值得让别人知道的事实",用过去式命名。

"优选门店"里的领域事件:订单已创建(OrderPlaced)、订单已支付(OrderPaid)、订单已取消(OrderCancelled)、库存已扣减(StockDeducted)。

注意都是过去式——表示"事情已经发生了",是既成事实,不是命令。