我的重构--重构案例2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的重构--重构案例2相关的知识,希望对你有一定的参考价值。

二.Ajax访问Controller层的返回

技术分享图片

技术分享图片


问题:1.增加了Controller的长度,controller做了自己本不应该做的事情;2.增加了他人阅读的困难,可能controller层一共5行,构造返回就占了4行

重构:

技术分享图片


将返回结果封装到了Utils中,使用简单工厂+模版模式,链式编程返回结果


工程中将结果的封装放在BaseController层,也有一定的目的和好处



三.登陆重构

 

问题:1.登陆controller层代码4,5篇,controller表示亚历山大2.代码过长看不懂,也没有必要的注释

解决:拆解代码并重构

1>对比验证码 问题:removeAttribute重复  if逻辑判断太长 只使用一次的局部变量  StringUtils使用不彻底


技术分享图片

      重构结果:

技术分享图片

技术分享图片

以上两种都可以:只使用一次的局部变量应该删除,但表示语意的局部变量可以保留(方便理解阅读)


2> 判断登陆操作是否超过限制

技术分享图片

问题:代码目的不明确

技术分享图片

3>统一用户结果的处理


技术分享图片

问题:局部变量的滥用  for if的滥用(逻辑矛盾) 

有必要更新操作吗?(统一用户只会更新密码,而我们shiro可以登陆免密码,密码不需要存储和更新)

重构:抽取方法


技术分享图片

抽取方法替代局部变量

3>实际登陆操作if else的滥用

技术分享图片

一个三元运算符就可以解决的事情,实际登陆(包括shiro的登陆和缓存的存储)可以进行抽取(业务中注册也可以调用)

技术分享图片

4> 登陆供应商的操作(业务是否需要还是个问题,重构的原则不改变代码业务,那就不考虑业务是否需要了)

技术分享图片



技术分享图片


技术分享图片


问题:这些操作不该出现再controller层   供应商为空判断方法中多处出现

双层for循环里面夹着if else需要优化

重构:对其业务不太清楚,重构结果不太


技术分享图片


重构最终代码附上:

技术分享图片








以上是关于我的重构--重构案例2的主要内容,如果未能解决你的问题,请参考以下文章

重构重构:第一个案例

我的重构-初识

七年三次大重构,聊聊我的重构成长史

JavaWeb1.3.3基础加强:注解案例(注解+反射重构"JavaWeb-1.2.3基础加强:案例(反射+配置文件))

第1章 重构,第一个案例:分解并重组statement函数

Android 代码重构案例