Laravel领域驱动设计(DDD)中服务类与控制台生成器存放位置咨询
DDD模式下Laravel的服务类与自定义控制台命令存放方案
问题1:FileOperation、Curl等服务类的存放位置
这类服务属于基础设施层的技术实现组件,核心职责是与外部资源(文件系统、HTTP服务、系统进程、外部脚本)交互,不属于业务核心逻辑范畴。因此不建议保留在原生的app/Services目录,也不应放在应用层(app/Application)——应用层的核心是编排业务用例、协调领域层与基础设施层,而非存放具体技术实现。
推荐方案:
- 按服务类型拆分到
app/Infrastructure下的对应子目录,示例结构:- 文件操作服务:
app/Infrastructure/File/FileOperation.php - Curl请求服务:
app/Infrastructure/Http/Curl.php - 系统进程调用服务:
app/Infrastructure/System/PsService.php - Python脚本调用服务:
app/Infrastructure/Script/PythonScriptExecutor.php
- 文件操作服务:
- 这种结构可清晰区分不同类型的基础设施实现,完全契合DDD“基础设施层封装技术细节”的核心原则。
问题2:自定义Stub生成器(artisan make:*命令)的存放位置
自定义的stub生成器属于辅助开发的框架基础设施工具,核心是与Laravel控制台系统集成,并非业务逻辑入口。
推荐方案:
- 将这类命令放在
app/Infrastructure/Console/Commands/目录下,同时保持控制台Kernel在app/Infrastructure/Laravel/Kernel/Console.php的位置(与你查阅的DDD适配方案统一)。 - 若后续开发业务相关的控制台命令(比如执行业务任务、业务数据迁移的命令),则建议放在
app/Interface/Console/Commands/目录——接口层负责处理用户/外部系统的交互入口,命令行交互属于接口的一种形式。
不建议保留原生的app/Console目录,否则会破坏DDD的分层结构,导致代码职责边界模糊。
内容的提问来源于stack exchange,提问作者khai
相关产品推荐
相关产品推荐

