# Laravel 中 Services 和 Domain Actions 有什么区别？

> 在 AI 主导开发的项目中，Domain Actions 能提供比通用 Service 更明确的业务边界。

发布日期：2026-07-10
更新时间：2026-07-10
分类：Laravel
标签：Laravel, Architecture, AI Development

## 问题

Laravel 项目中的 Services 和 Domain Actions 有什么区别？在 AI 辅助开发时应该如何选择？

## 回答

**Service** 通常是按技术层或模块划分的容器，例如 `OrderService`、`PaymentService`。它适合承载跨多个用例的通用操作，但边界容易随着功能增长而变得模糊。

**Domain Action** 则按单一业务意图命名，例如 `PlaceOrder`、`RefundPayment`。每个 Action 只做一件事，输入输出明确，更利于 AI 理解上下文、生成测试，以及人类 code review。

在 AI 主导开发的项目里，Action 的命名即文档：模型看到 `CancelSubscription` 就知道该读哪些模型、触发哪些事件，而不必在一个 800 行的 Service 里搜索。

## 关键结论

- Service 适合**技术复用**；Domain Action 适合**业务意图**表达。
- AI 生成代码时，Action 粒度小、依赖少，出错面更可控。
- 不必二选一：Action 内部可以调用共享 Service，但对外入口优先 Action。

## 操作步骤

1. 列出当前 Service 中的 public 方法，按业务动词重命名。
2. 每个 Action 单独文件，构造函数注入依赖。
3. Controller 只调用 Action，不写业务逻辑。
4. 为每个 Action 写一条 feature test，作为 AI 回归基准。

## 限制与注意事项

- 小项目过度拆分 Action 会增加文件数量；团队小于 3 人时可从核心域开始。
- Action 不是 Silver Bullet：复杂编排仍可用 Job / Pipeline 组合多个 Action。