You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:43:13