展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > ThinkPHP大型项目目录结构分层实践_Service层与逻辑层目录

ThinkPHP大型项目目录结构分层实践_Service层与逻辑层目录

Service层封装可复用的领域行为,不处理HTTP状态码与请求参数;Logic层仅用于桥接多个Service,避免写数据库查询;目录结构按业务域垂直切分;Service类应依赖接口,通过构造函数注入以支持单元测试与替换。

本文目录

    Service层只封装可复用、跨Controller的领域行为,比如OrderService::createWithItems()负责库存校验、扣减等,但不处理HTTP状态码、不读Request;参数解析、权限判断等应由中间件或BaseController承担。

    ThinkPHP大型项目目录结构分层实践_Service层与逻辑层目录

    Service 层该放什么,不该放什么

    Service 层不是“写业务逻辑的地方”这个模糊概念的垃圾桶。它只做一件事:封装可复用、跨 Controller 的领域行为。比如 OrderService::createWithItems() 要负责校验库存、扣减、生成流水、发消息——但不处理 HTTP 状态码、不读 Request 对象、不调 view()。

    常见错误是把参数解析、权限判断、日志埋点塞进来。这些该在中间件或 BaseController 里做。Service 一旦开始 input()->get() 或 session()->get(),就说明职责溢出了。

    • ✅ 正确:调用 GoodsStockService::decrease()、组装 $orderData、事务内写多张表
    • ❌ 错误:从 input() 取参数、手动拼 SQL、返回 json(['code'=>0])
    • ⚠️ 注意:App\Service\Payment\AlipayService 这种第三方对接类可以存在,但它必须被上层 Service 组合调用,不能被 Controller 直接 new

    Logic 层和 Service 层怎么划清边界

    ThinkPHP 官方没定义 Logic 层,所以项目里出现 App\Logic\ 时,大概率是历史包袱或职责混乱的信号。真要分层,建议只保留 Service,并用子命名空间表达语义层级,比如 App\Service\Order\CreationService 和 App\Service\Order\RefundService —— 它们同属 Order 领域,但动作分离。

    如果硬要设 Logic 层,唯一合理场景是:同一业务动作中,需桥接多个 Service 并做轻量协调(无状态、无持久化)。例如 OrderLogic::cancelAndRefund() 内部调 OrderService::cancel() + RefundService::apply(),但它自己不查库、不改库、不加事务。

    • ✅ 合理:Logic 类只 new Service、调方法、return 结果,方法体不超过 10 行
    • ❌ 危险:Logic 类里写 DB 查询、含 if-else 分支逻辑、带事务注解
    • ⚠️ 兼容性提示:TP6 的 think-orm 默认不扫描 Logic 命名空间,若用了依赖注入,得手动在 app/provider.php 里加绑定

    目录结构怎么避免“越拆越乱”

    大型项目最常犯的错,是按技术类型(如 Controller/Model/Service)平铺三级目录,结果一个订单功能散落在 5 个目录下,改个字段要开 8 个文件。应该按业务域垂直切分,再按职责水平分层。

    推荐结构:app/Order/Controller/OrderController.php、app/Order/Service/OrderService.php、app/Order/Dto/OrderCreateDto.php、app/Order/Repository/OrderRepository.php。Domain 层(如 app/Order/Domain/Order.php)可选,但一旦引入,就必须禁止 Service 直接 new Model。

    • ✅ 推荐:app/{Domain}/ 下只放该域相关代码,跨域调用走 Service 接口
    • ❌ 反模式:app/Service/OrderService.php + app/Service/UserService.php + app/Service/OrderUserRelationService.php —— 关系类不该独立成 Service
    • ⚠️ 性能注意:TP6 自动加载基于 PSR-4,app/Order/Service/ 比 app/Service/Order/ 更易命中缓存,因为命名空间更短

    Service 类如何支持单元测试和替换

    Service 不是工具类,它必须能被容器管理、能被 Mock、能被换实现。这意味着不能有静态方法、不能 new 具体类、不能读全局变量。所有外部依赖(DB、缓存、HTTP 客户端)必须通过构造函数注入或接口依赖。

    比如 OrderService 依赖库存服务,就该依赖 StockInterface 而非 GoodsStockService。测试时用 Mock 实现,上线时 bind 到真实实现。TP6 的 app/provider.php 是绑定入口,别漏掉。

    • ✅ 正确:public function __construct(private StockInterface $stock)
    • ❌ 错误:new GoodsStockService()、Cache::get()、Db::table()
    • ? 小技巧:在 app/common.php 里写 function app_service($name) { return app()->get($name); },比直接 new 更利于后期切 AOP

    事情说清了就结束。真正难的不是分几层,而是每次新增一个接口时,能不能忍住不把校验、查询、更新、通知全塞进一个方法里。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。