做 web 开发,无论哪个语言,无论哪个框架都有 controller 和 service 两个概念,很多时候也分不清楚逻辑写在 controller 还是 service ,框架一般也不做强制限制,都在于开发者自身的素质能力以及对框架的认知。

究竟什么是 controller,可以说他是对 http 中 request 的解析,以及对 response 的封装,它对应的是每一个路由,是 http 请求到代码的一个承接,它必须是可单例的,是无状态的。

service 顾名思义是为了服务而生,为了业务而生,是为了一个抽象而生,可以写一个 EmailService 去处理邮件的相关逻辑,写一个 AuthorizationService 去处理登录注册,总之是为了处理一系列的业务,在这个层次你不应该去访问 http 中的参数,而是在 controller 中传递一个参数,或者构造一个对象传递到 service。

controller 和 service 也应该是多对多的关系,一个 controller 中当然是可以调用多个 service,一个 service 当然也可以被多个 controller 调用,service 还可以是互相调用。

那为什么 service 中不应该访问 http 相关的参数呢,其实以著名 php 框架 laravel 为例,laravel 中 有个 command 文件夹,可以写一些执行命令,这些命令的业务可能和某个 http 接口是一样的,但是 http 接口可能需要进行签名,token之类的等等规则的校验,但是使用 command 去调用 service 可以直接执行到核心逻辑。

以上的 command 只是举个例子,想表达的意思是 service 是可以被各种环境调用,虽然更多时候它只有一种能力,仅仅去处理 controller 发过来的 http 请求,但是它应该是一个抽象,应该被抽象。

作者:追风骚年
链接:https://www.jianshu.com/p/7dba237b14d3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

controller和service相关推荐

  1. Spring中的Controller ,Service,Dao是不是线程安全的?

    作者:myseries cnblogs.com/myseries/p/11729800.html 结论:不是线程安全的 Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策 ...

  2. 多模块打包后,扫描不到@controller和@service,实现 ADD DIRECTORY ENTRIES

    多模块打包后,扫描不到@controller和@service等Bean. 原因:打包时没有生成目录信息 解决办法: 1.在eclipse或者myeclipse 打包时 勾选 ADD DIRECTOR ...

  3. koa --- [MVC实现之四]Router、Controller、Service的实现

    说明 上一篇: [MVC实现之三] 上一篇实现了,Router层.Controller层.Service层的基本原则,并且成功的通过Mar类来传递这些层级之间需要的参数. 这一篇主要是通过业务层面来具 ...

  4. springboot基于mybatis扫描jar包中的controller、service、dao、xml

    springboot基于mybatis扫描jar包中的controller.service.dao.xml 最近有这样的需求,是将某个业务模块接口,比如新闻的接口模块 作为一个公共固定的模块,整个包括 ...

  5. Controller、Service、Dao进行Junit单元

    原文链接:http://blog.csdn.net/u013041642/article/details/71430293 Spring对Controller.Service.Dao进行Junit单元 ...

  6. vo、dto、bo、do、po的概念理解以及与controller、service、dao层的对应关系

    目录 概念 关于do的理解 业务逻辑分层 基于springboot的逻辑分层结构 什么时候需要定义这么多O 实际项目中的使用方式 同一微服务中 不同微服务 一般起名规则 概念 VO(View Obje ...

  7. springmvc测试类中如何引入controller与service,request,respon

    使用的引入注解不同 (引入controller的时候有时候会拿不到,那是因为controller类的最上面,没有引入@Controller注解:) @RunWith(SpringJUnit4Class ...

  8. 在Controller注入Service报错的解决方法

    在Controller注入Service报错的解决方法 参考文章: (1)在Controller注入Service报错的解决方法 (2)https://www.cnblogs.com/zhangxj/ ...

  9. 彻底弄懂@Controller 、@Service、@Component

    今天主要聊聊@Controller .@Service和@Component这三个注解的关系和区别.网上很多人对这三个注解进行了详细的解释,但是仅仅局限于理论,个人对于没有经过自己验证的结果总是持怀疑 ...

  10. nestjs入门(controller,service,module)

    nestjs中比较重要的几个概念controller,module,service,每个nestjs的模块都有以上3个基本文件组成. module:是用来对外暴露当前模块,以及该模块下需要用到的con ...

最新文章

  1. linux 下载jdk
  2. SpringBoot应用部署于外置Tomcat容器
  3. Linux使用iptables设置黑白名单
  4. python字典的特点是什么_Python中dict的特点
  5. POJ 2653 Pick-up sticks (线段相交)
  6. java空文本_输出到文本文件,控制台为空-Java
  7. 【性能测试】性能需求挖掘、性能方案制定及压测场景设计之疑惑与思考(一)
  8. NiceScroll文档阅读笔记-NiceScroll(3.7.6)基本使用
  9. java 常用 函数_java在线报表中有哪些常用函数
  10. linux expect案例用法
  11. 中国搜索20年:巨头百度的兴衰密码
  12. 安全防范报警系统产品质量监督检测测试中心(上海)
  13. 信度和效度经典例子_信度与效度公式的纠正
  14. Oracle安装之后电脑变慢
  15. 什么是数字“指纹”?
  16. html2canvas页面滚动时截图不全空白问题
  17. 你真的了解验证码吗?
  18. BSD维基百科,自由的百科全书
  19. xiao297328是个骗子,大家注意了啊
  20. Oracle教学辅助.书写历史的甲骨文--ORACLE公司传奇

热门文章

  1. 简单分享微信小程序上酒店订房系统怎么做
  2. 一段代码把PC端页面适配手机端
  3. Web —— 在自己电脑搭建网站,发布到公网,并使用域名访问
  4. 为什么说二手机只有iPhone值得买?因为5年前的国产手机已很难用
  5. js把字符串变成对象
  6. html5做一个皮卡丘,画一只会动的皮卡丘(上)
  7. Python中的lambda函数用法
  8. java实现网上下载文件到本地
  9. springboot球馆运动场地预约系统在线视频点播系统毕业设计毕设作品开题报告开题答辩PPT
  10. docker安装部署