以切身体会浅谈对Controller和Service的理解
进入开发行业以来,异常,日志,业务层次划分等等看似简单的问题却让我琢磨了很久,也切身体会到工作经验不仅仅是你技术上的累积,也包含很多类似这种实际工作中的细节问题的处理,而这些却是在课堂上学不会的,只有你真的经历过了,你才会深刻的理解为什么底层异常要抛,为什么有些代码应该写在service而不是controller层。下面我总结了几个自己这一年来常常遇到的问题,并谈谈一些自己的看法,当然随着经验的累积,可能对于一些问题的理解会更透彻,现在就简单谈一下此刻的一些认识:
1.在controller和service里都写那些代码?
Controller,从字面上理解是控制器,所以它是负责业务调度的,所以在这一层应写一些业务的调度代码,而具体的业务处理应放在service中去写,而且service不单纯是对于dao的增删改查的调用,service是业务层,所以应该更切近于具体业务功能要求,所以在这一层,一个方法所体现的是一个可以对外提供的功能,比如购物商城中的生成订单方法,这里面就不简单是增加个订单记录那么简单,我们需要查询库存,核对商品等一系列实际业务逻辑的处理;
2.在整个项目中什么时候加异常?异常怎么处理?
说到异常,我们应该回想下我们学习异常这一模块时,异常到底是什么有什么用?一直以来都觉得如果代码出现了异常是件让我悲伤的事,因为它意味着我哪里写错了,但是现在回想最初的认识都觉得有点好笑,"人,孰能无过",我所理解的异常只是我自己认为造成的错误,但殊不知实际中的异常情况是很多的,除了自身造成问题之外,服务器down了,或者数据状态发生改变,甚至断网都可能造成异常,所以从另一方面,异常是服务于我们的,是为了我们更好的发现问题解决问题而存在的,在这里,真的由衷的敬佩创造异常机制的前辈,他们过人的智慧真让人望尘莫及~
回到话题上,那么实际中我们该怎么做呢?个人觉得我们应该从底层的dao一直到action,应对每一层的代码进行基本的try-catch,有时根据业务需求可能要进行多个catch,由上至下依次捕获从小到大的各种异常,一般对底层的异常应该往出抛,目的是要通知上一层也就是调用者出现了什么问题,但是对于和用户直接交互的前台让用户看到后台的这些异常信息可是不妥的,所以我们需要将异常信息转换常用的友好提示给用户,而对于异常信息应记录到日志以便对问题进行分析解决。
3.什么时候该记日志?怎么记?
关于日志,个人觉得其实没必要想的太神秘,日志就是记录信息,可以记录一些异常信息,也可以记录一些业务日志,不过日志分了几个级别,有error 有info等等,我暂时还没细看,所以就不多说了
4.对于参数的安全性判断应该写在controller还是service?
数据安全性校验,当然在哪一层都是很有必要的,一般我会在controller进行一些参数合法性校验,但是这一点被组长说过几次了,建议在service层进行校验,容我好好想想怎样才合理吧~
以上是我初次记录自己一年来困扰我最多的几个问题,后续认识有所改变或加深了再来更新,ok,就到这吧!又得赶代码了~
以切身体会浅谈对Controller和Service的理解相关推荐
- [原创]浅谈在创业公司对PMF的理解
[原创]浅谈在创业公司对PMF的理解 在创业时,大多数人都常谈一个词叫"MVP",但PMF谈的比较少,PMF在创业公司尤为重要,以下谈谈个人一些看法. 1.什么是PMF? 创业公司 ...
- 浅谈对java编程思想的理解
浅谈对java编程思想的理解 刚从学校毕业的时候,对于这种概念的理解少之又少 ,只是单纯的从事编码工作,理解也只是停留在对java基本概念的使用上,很局限!随后工作了快三年的时间里,自己不断的理解这种 ...
- 浅谈对IT架构师的理解
写此文章来源于到新公司的感触,我在新单位任职解决方案架构师职位,到了新公司碰到新同事大多以一种"异样"的眼光看着我,或者发出一些声音,比如:"哇,架构师啊..." ...
- 浅谈对敏捷开发的初期理解
2019独角兽企业重金招聘Python工程师标准>>> 毕业一个半月了,在TW的工作还算顺利,对于我这种小白而言第一次接触到了敏捷开发的流程,为了巩固知识加深了解,所以将在这篇博客中 ...
- 浅谈对软件企业OEM的理解
OEM (Original Equipment Manufacturer),汉语的翻译为"原始设备制造商",含义是指定牌生产合作,通俗的说法叫做"代工".这里面 ...
- 浅谈对离散型随机变量期望的理解
在看<程序员的数学2--概率统计>关于离散型随机变量的大数定律解释时,有两个概念一定需要弄明白: 随机变量的期望: 随机变量结果的平均值. 在<Probability and Sta ...
- 浅谈对px em rem的理解
px: pc端最常用的的单位,大小固定,不会随窗口的变化而变化 例子: .box{width:100px; height:100px; font-size: 16px; border:1px soli ...
- 浅谈我对动态规划的一点理解---大家准备好小板凳,我要开始吹牛皮了~~~
前言 作为一个退役狗跟大家扯这些东西,感觉确实有点...但是,针对网上没有一篇文章能够很详细的把动态规划问题说明的很清楚,我决定还是拿出我的全部家当,来跟大家分享我对动态规划的理解,我会尽可能的把所遇 ...
- 浅谈对于企业级系统架构的理解
导读:本文针对企业系统架构作出分析,发表独特见解,系统架构并不是一层不变的,没有最好的架构,只有更好的架构,要从实际情况去考虑,从项目中多思考系统的扩展性. 以下是文章内容: 在我们刚开始学习架构的时 ...
最新文章
- php类退出魔术方法,php类中常用的魔术方法
- 【合并单元格】纵向合并单元格之前对数组处理【针对饿了么element的table的span-method合并行或列的计算方法】
- 马化腾与中国知名科学家联手发起“科学探索奖”
- 【HDOJ】4343 Interval query
- C++应用程序性能优化
- 国内外ip地址黑名单查询
- html5多大场景,HTML5新标签解释及其使用场景
- 张弥曼获“世界杰出女科学家奖”,她的贡献在哪你一定要知道!
- 生成一个GitHub的token用于git推送本地库至远程库
- (2)verilog语言编写打两拍
- php 前端加密密码,WEB前端对应PHP后端的AES加密解密代码
- Viod Class 启动
- [不得不提]国外的一个silverlight for cube的商业组件
- 【java学习之路】(java框架)006.springIOC
- C程序推算你生日的日期
- [PHP] - visitFile()遍历指定文件夹
- 宋红康 jvm 课程ppt(String部分)
- UI设计的色彩搭配及原则
- 算法竞赛命题指南(命题流程、Polygon的使用等)
- oracle 渗透,ODAT:一款专门用于Oracle渗透的工具