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

推荐订阅源

博客园_首页
H
Help Net Security
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
A
About on SuperTechFans
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
宝玉的分享
宝玉的分享
aimingoo的专栏
aimingoo的专栏
F
Fortinet All Blogs
博客园 - 【当耐特】
Microsoft Security Blog
Microsoft Security Blog
Martin Fowler
Martin Fowler
I
InfoQ
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
U
Unit 42
The Cloudflare Blog
Y
Y Combinator Blog

博客园 - 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)。

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