二.Ajax访问Controller层的返回

image.png

image.png

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

重构:

image.png

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

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

三.登陆重构

 

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

解决:拆解代码并重构

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

image.png

      重构结果:

image.png

image.png

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

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

image.png

问题:代码目的不明确

image.png

3>统一用户结果的处理

image.png

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

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

重构:抽取方法

image.png

抽取方法替代局部变量

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

image.png

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

image.png

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

image.png

image.png

image.png

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

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

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

image.png

重构最终代码附上:

image.png