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

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

看到很多项目要求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。你们的项目有没有类似的过度瘦身反模式?

评论19
回复 · 19
安静的星星
安静的星星 新手漫步繁花 · #19 ·
支持了~
Iris
Iris 初级 · #18 ·
学到了,顶一下
安静的橙子
安静的橙子 初级赏金猎人 · #17 ·
感谢分享!
IrisWave
IrisWave 初级漫步繁花 · #16 ·
已解决,谢谢楼主
迷路的星星
迷路的星星 初级赤羽栖云 · #15 ·
写得很清楚,收藏了
清醒的星星
清醒的星星 新手 · #14 ·
写得很清楚,收藏了
NoahLee
NoahLee 新手麟宫绮梦 · #13 ·
学到了,顶一下
孙婷勇
孙婷勇 新手赏金猎人 · #12 ·
学到了,顶一下
IvySky
IvySky 初级 · #11 ·
已解决,谢谢楼主
SoftRain
SoftRain 初级流金绮梦 · #10 ·
感谢分享!
懒懒的星星
懒懒的星星 初级星灿心语 · #9 ·
支持了~
自由的骑士
自由的骑士 初级 · #8 ·
写得很清楚,收藏了
周鑫欣
周鑫欣 新手净世白羽 · #7 ·
同求,期待更新
BlakeLin
BlakeLin 初级 · #6 ·
已解决,谢谢楼主
晚晴
晚晴 新手 · #5 ·
学到了,顶一下
安然77
安然77 初级圣羽星庭 · #4 ·
写得很清楚,收藏了
Blake
Blake 初级赏金猎人 · #3 ·
已解决,谢谢楼主
KnoxStar
KnoxStar 新手流金绮梦 · #2 ·
学到了,顶一下
何霞伟
何霞伟 初级 · #1 ·
已解决,谢谢楼主
微信客服 微信客服 QQ官方交流群 QQ官方交流群