110 lines
2.5 KiB
Markdown
110 lines
2.5 KiB
Markdown
# 06 Laravel 后端结构
|
||
|
||
## 分层
|
||
|
||
不要把所有业务代码写进 Controller。推荐:
|
||
|
||
```
|
||
Controller
|
||
↓
|
||
FormRequest
|
||
↓
|
||
Service / Action
|
||
↓
|
||
Domain Logic
|
||
↓
|
||
Model / Repository
|
||
↓
|
||
Database
|
||
```
|
||
|
||
Controller 只负责:
|
||
|
||
- 接收请求
|
||
- 参数验证(通过 FormRequest)
|
||
- 调用业务服务
|
||
- 返回 API Resource
|
||
|
||
复杂业务必须进入 Service / Action。
|
||
|
||
## Action 命名示例
|
||
|
||
- CreateInboundAction
|
||
- ReceiveInboundAction
|
||
- PutawayInboundAction
|
||
- AllocateOutboundAction
|
||
- CreateWaveAction
|
||
- PickOrderAction
|
||
- PackOrderAction
|
||
- ShipOrderAction
|
||
- AdjustInventoryAction
|
||
- StocktakeAction
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
app/
|
||
├── Domain/ # WMS 核心业务规则(状态机、领域规则、值对象、枚举)
|
||
│ ├── Inventory/
|
||
│ ├── Order/
|
||
│ ├── Inbound/
|
||
│ ├── Outbound/
|
||
│ ├── Warehouse/
|
||
│ ├── Picking/
|
||
│ ├── Packing/
|
||
│ ├── Shipment/
|
||
│ ├── Return/
|
||
│ └── Logistics/
|
||
│
|
||
├── Application/ # 应用层用例
|
||
│ ├── Inventory/
|
||
│ │ ├── Actions/
|
||
│ │ ├── Services/
|
||
│ │ └── DTOs/
|
||
│ ├── Order/
|
||
│ ├── Inbound/
|
||
│ └── Outbound/
|
||
│
|
||
├── Http/
|
||
│ ├── Controllers/
|
||
│ ├── Requests/
|
||
│ └── Resources/
|
||
│
|
||
├── Models/ # Eloquent 模型(数据持久化)
|
||
│
|
||
├── Jobs/
|
||
├── Events/
|
||
├── Listeners/
|
||
├── Policies/
|
||
├── Console/
|
||
├── Support/ # 通用支持:TenantContext、ApiResponse 等
|
||
│
|
||
└── Infrastructure/ # 外部适配
|
||
├── Cache/
|
||
├── Queue/
|
||
├── Logistics/
|
||
└── Platforms/
|
||
├── Amazon/
|
||
├── TikTokShop/
|
||
├── Temu/
|
||
├── Shopee/
|
||
└── Mirakl/
|
||
```
|
||
|
||
## 职责划分
|
||
|
||
| 层 | 职责 |
|
||
| --- | --- |
|
||
| Laravel(Http / Application) | 应用层:请求、用例编排、事务边界 |
|
||
| Domain | WMS 核心业务规则 |
|
||
| Eloquent(Models) | 数据持久化 |
|
||
| Queue(Jobs) | 异步任务 |
|
||
| Adapter(Infrastructure) | 第三方平台、物流商 |
|
||
| TenantContext | 多租户隔离 |
|
||
|
||
## 依赖方向
|
||
|
||
- Http → Application → Domain;Infrastructure 实现 Domain / Application 定义的接口。
|
||
- Domain 不依赖 Http、不依赖具体第三方平台。
|
||
- 模块之间避免强耦合,跨模块协作优先通过 Application Service 或 Events。
|