controller层和service层分工及service层错误返回问题

使用lavarel做项目时,有时会分controller层和service层,那具体应该如何分工来实现优雅的处理呢,假设有一个这样一个场景,一个多用户的博客系统,每个用户都可以创建自己的文章分类,同一个用户的多个分类名称不能相同,现在要实现修改分类的接口,大概有下面几个步骤,
1 验证提交的参数是否合法(分类id,分类名称)
2 检查分类id对应的数据是否存在
3 检查该分类数据是否属于当前用户(当然不能修改别人的分类数据)
4 检查分类名称是否已存在
5 修改数据保存到数据库

以上面这个场景为例,哪些步骤应该放在controller?如果在service层出现错误,如分类名已存在,应该如何处理及返回呢?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

不管哪一步出现问题,直接抛异常,异常可以在异常捕获里面处理,可以去看我写的摸鱼返回值。 控制器配合 自动验证做数据验证,简单的数据拼装。 服务层做真正的数据处理。

尽量不在控制器里面写复杂的业务代码。

2年前 评论
讨论数量: 7

不管在哪一层,有错误,直接抛异常,你可以做全局异常处理,也可以在控制器中处理。

2年前 评论

个人感觉业务复杂,需放到service,错误抛异常。简单可不用放到service

1 验证提交的参数是否合法 (分类 id, 分类名称) 【控制器验证或请求表单验证】

2 检查分类 id 对应的数据是否存在 【模型 依赖注入】

3 检查该分类数据是否属于当前用户(当然不能修改别人的分类数据)【策略】

4 检查分类名称是否已存在 【不复杂直接放控制器,模型类查一下】

5 修改数据保存到数据库 【直接放控制器修改】

2年前 评论

不管哪一步出现问题,直接抛异常,异常可以在异常捕获里面处理,可以去看我写的摸鱼返回值。 控制器配合 自动验证做数据验证,简单的数据拼装。 服务层做真正的数据处理。

尽量不在控制器里面写复杂的业务代码。

2年前 评论

controller就单一做请求转发,逻辑都放在service层。举例说明:BlogService:check create update 等方法

2年前 评论

1,2,4 在 验证器 中实现,根本都走不到 Controller

3 在 Policy 中实现,也走不到 Controller

如果你觉得 4 有必要放到 Service 那你就放,我个人习惯 curd 都在 Controller 中处理。

只有复杂的业务逻辑和数据处理或者考虑到复用性才用到 Service

2年前 评论

可以自己去实现一个 MessageBag 类, 有错误消息用这个类统一返回给上一层

2年前 评论

不管怎么样 都会在全局异常类里面做最后的兜底

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!