分层架构优化:Controller只做参数校验是否过度?

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
插件开发 260 浏览 30 回复

看到很多项目要求Controller层只做参数校验和简单转发,实际开发中却经常遇到尴尬场景。比如这个商品发布逻辑:

// Controller层被迫膨胀的例子 public function createProduct(Request $request) { // 参数校验(10行) $validator = Validator::make(...); // 业务规则校验(本应属于Service) if ($this->productService->exists($request->name)) { abort(422, '商品已存在'); } // 权限校验(本应属于中间件) if (!auth()->user()->can('create')) { abort(403); } // 调用Service(终于...) $product = $this->productService->create(...); // 响应处理(格式转换) return new ProductResource($product); }

更合理的拆分应该是:

1. 参数校验 => FormRequest类(Laravel)或DTO

2. 权限校验 => 中间件/策略类

3. 存在性检查 => Service层业务规则

4. 资源转换 => 单独Transformer层

实际经验:当Controller方法超过20行时,就该考虑哪些逻辑其实属于"请求预处理",而不该硬塞进Controller。你们的项目有没有类似的过度瘦身反模式?

评论30
回复 · 30
MellowBee
MellowBee 新手净世白羽 · #20 ·
已解决,谢谢楼主
发光的柚子
发光的柚子 初级璃海华章 · #19 ·
学到了,顶一下
小小的月亮
小小的月亮 新手璃梦花海 · #18 ·
支持了~
IrisPark
IrisPark 新手璃梦花海 · #17 ·
写得很清楚,收藏了
GraceWei
GraceWei 初级 · #16 ·
感谢分享!
唐凯婷
唐凯婷 初级清瑶问鼎 · #15 ·
同求,期待更新
懒懒的汽水
懒懒的汽水 初级 · #14 ·
学到了,顶一下
刘涛桂
刘涛桂 初级清瑶问鼎 · #13 ·
感谢分享!
小小的树洞
小小的树洞 初级星灿心语 · #12 ·
写得很清楚,收藏了
OpenField
OpenField 初级流金绮梦 · #11 ·
同求,期待更新
韩桂
韩桂 初级心屿荧途 · #10 ·
学到了,顶一下
安静的星星
安静的星星 新手番响心动 · #9 ·
支持了~
Iris
Iris 初级 · #8 ·
学到了,顶一下
安静的橙子
安静的橙子 初级赏金猎人 · #7 ·
感谢分享!
IrisWave
IrisWave 初级漫步繁花 · #6 ·
已解决,谢谢楼主
迷路的星星
迷路的星星 新手圣羽星庭 · #5 ·
写得很清楚,收藏了
清醒的星星
清醒的星星 初级星灿心语 · #4 ·
写得很清楚,收藏了
NoahLee
NoahLee 初级麟宫绮梦 · #3 ·
学到了,顶一下
孙婷勇
孙婷勇 新手璃海华章 · #2 ·
学到了,顶一下
IvySky
IvySky 初级 · #1 ·
已解决,谢谢楼主
1 2
微信客服 微信客服 QQ官方交流群 QQ官方交流群