专栏首页java一日一条我的编码习惯 - Controller规范

我的编码习惯 - Controller规范

第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口定义规范,使用AOP技术之后最终交付的代码,从15行到1行,自己感受一下。今天来说说大家关注的AOP如何实现。

先说说Controller规范,主要的内容是就是接口定义里面的内容,你只要遵循里面的规范,controller就问题不大,除了这些,还有另外的几点:

1 所有函数返回统一的ResultBean/PageResultBean格式

原因见我的接口定义这个贴。没有统一格式,AOP无法玩。

2 ResultBean/PageResultBean是controller专用的,不允许往后传!

3 Controller做参数格式的转换,不允许把json,map这类对象传到services去,也不允许services返回json、map。

一般情况下!写过代码都知道,map,json这种格式灵活,但是可读性差,如果放业务数据,每次阅读起来都比较困难。定义一个bean看着工作量多了,但代码清晰多了。

4 参数中一般情况不允许出现Request,Response这些对象

主要是可读性问题。一般情况下。

5 不需要打印日志

日志在AOP里面会打印,而且我的建议是大部分日志在Services这层打印。

规范里面大部分是 不要做的项多,要做的比较少,落地比较容易。

ResultBean定义带泛型,使用了lombok。

AOP代码,主要就是打印日志和捕获异常,异常要区分已知异常和未知异常,其中未知的异常是我们重点关注的,可以做一些邮件通知啥的,已知异常可以再细分一下,可以不同的异常返回不同的返回码:

AOP配置:(关于用java代码还是xml配置,这里我倾向于xml配置,因为这个会不定期改动)

现在知道为什么要返回统一的一个ResultBean了:

  • 为了统一格式
  • 为了应用AOP
  • 为了包装异常信息

分页的PageResultBean大同小异,大家自己依葫芦画瓢自己完成就好了。

贴一个简单的controller(左边的箭头表示AOP拦截了)。请对比 程序员你为什么这么累?里面原来的代码查看,没有对比就没有伤害。

最后说一句,先有统一的接口定义规范,然后有AOP实现。先有思想再有技术。技术不是关键,AOP技术也很简单,这个帖子的关键点不是技术,而是习惯和思想,不要捡了芝麻丢了西瓜。网络上讲技术的贴多,讲习惯、风格的少,这些都是我工作多年的行之有效的经验之谈,望有缘人珍惜。

====================GITHUB地址

所有的代码细节都在已经上了github了,地址 xwjie/PLMCodeTemplate,有问题欢迎提出。

本文分享自微信公众号 - java一日一条(mjx_java)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • servlet 理解大全

    java创建的对象存放在堆中。java虚拟机会主动察觉不再使用的java对象,内存紧张的时候,垃圾收集器会启动清理垃圾,回收空间

    用户2436820
  • 集合(2)

    我们知道数组和ArrayList有一个重大缺陷。这个缺陷就从数组的中间位置删除一个元素需要付出重大的代价,因为从数组中间删除一个元素,元素中间的位置都需要向前移...

    用户2436820
  • import export 理解

    1.  ES6之前JavaScript没有模块体系,相关社区提供了一些加载方案,最主要是两种CommonJs和AMD两种。ES6在语言标准层面实现了,实现了模块...

    用户2436820
  • 什么是字节码?

    字节码(Byte-code)是一种包含执行程序,由一序列 op 代码/数据对组成的二进制文件,是一种中间码。字节是电脑里的数据量单位。

    用户2436820
  • java基本程序设计

    保护对象实例域,提供黑盒的概念保护数据域的安全,体现了面向对象思想。数据>算法的思想

    用户2436820
  • 泛型程序设计

    当程序调用泛型类型,如果擦除返回类型,编译器将插入强制类型转换 Pair<Employee> buddies = . . Employee buddy = ...

    用户2436820
  • 分布式对象之客户\服务器角色以及RMI初探

    程序员希望通过无所不在的java对象来作为所有问题的解决之道,思想就是通过网络请求相互协作。我可以调用一个远程对象帮我得到我所要的信息,并作为响应的一部分返回

    用户2436820
  • Java中实现的简单算法 && 计算二分查找次数

    如果采用其他方式对列表进行排序可以使用List接口的sort方法传入一个Comarable的一个对象

    用户2436820
  • 映射---> 一眼看懂Map

    Java类库提供两个基本的实现,HashMap和TreeMap。两个类都实现了Map接口

    用户2436820
  • Java实现快速排序

    用户2436820

扫码关注云+社区

领取腾讯云代金券