鳄鱼咬掉同伴前腿,情剑神龙,福州出租房
场景描述:
一个controller中,部门领导有布置任务,查看任务整体情况,查看部门成员,查看部门成员完成情况,导出任务详情,如下:
@restcontroller @requestmapping(value = "/task") public class taskcontroller{ @postmapping(value = "/savetask") public jsonobject savetask(task task){ ... } @postmapping(value = "/taskdetail") public jsonobject taskdetail(task task){ ... } @postmapping(value = "/memberlist") public jsonobject memberlist(task task){ ... } @postmapping(value = "/memberdetail") public jsonobject memberdetail(task task){ ... } @postmapping(value = "/exporttask") public jsonobject exporttask(task task){ ... } }
过了一段时间后,新需求来了,之前任务是需求任务,现在任务种类多了一个测试任务,但是接口要公用一套。所以task加了一个type的字段用来区分不同的任务,1:原来类型的任务,2:测试任务,controller变成如下(task的类型type应该写在常量里面):
@restcontroller
@requestmapping(value = "/task")
public class taskcontroller{
@postmapping(value = "/savetask")
public jsonobject savetask(task task){
if( constants.common_task == task.type){
...
}else if( constants.test_task == task.type){
...
}
}
@postmapping(value = "/taskdetail")
public jsonobject taskdetail(task task){
if( constants.common_task == task.type){
...
}else if( constants.test_task == task.type){
...
}
}
@postmapping(value = "/memberlist")
public jsonobject memberlist(task task){
if( constants.common_task == task.type){
...
}else if( constants.test_task == task.type){
...
}
}
@postmapping(value = "/memberdetail")
public jsonobject memberdetail(task task){
if( constants.common_task == task.type){
...
}else if( constants.test_task == task.type){
...
}
}
@postmapping(value = "/exporttask")
public jsonobject exporttask(task task){
if( constants.common_task == task.type){
...
}else if( constants.test_task == task.type){
...
}
}
}
再之后又有新任务类型加进来,继续往这个controller的几个方法中增加if-else。目前的开发流程是controller-->service-->dao,判断那种任务,然后走到service调用这个任务的业务方法,现在使用多态的方法把if-else语句重构掉
首先创建一个抽象类,把共同的方法抽离出来
@service
public abstract class basetaskservice{
public abstract jsonobject savetask(task task);
public abstract jsonobject taskdetail(task task);
public abstract jsonobject memberlist(task task);
public abstract jsonobject memberdetail(task task);
public abstract jsonobject exporttask(task task);
}
然后不同的任务继承这个抽象类,具体的业务逻辑在自己的类上处理,需求任务:
@service
public class commontask extends basetaskservice{
@ovreride
public jsonobject savetask(task task){
...
}
@ovreride
public jsonobject taskdetail(task task){
...
}
@ovreride
public jsonobject memberlist(task task){
...
}
@ovreride
public jsonobject memberdetail(task task){
...
}
@ovreride
public jsonobject exporttask(task task){
...
}
}
测试任务:
@service
public class testtask extends basetaskservice{
@ovreride
public jsonobject savetask(task task){
...
}
@ovreride
public jsonobject taskdetail(task task){
...
}
@ovreride
public jsonobject memberlist(task task){
...
}
@ovreride
public jsonobject memberdetail(task task){
...
}
@ovreride
public jsonobject exporttask(task task){
...
}
}
再之后创建工厂类返回任务类
@service
public class taskfactory{
@autowired
private commontask commontask;
@autowired
private testtask testtask;
...
public basetaskservice gettask(integer type){
if(constants.common_task.equals(type){
return commontask;
}else if(constants.testtask.equals(type){
return testtask;
}else if(...){
...
}
...
}
}
最后修改controller就大功告成
@restcontroller
@requestmapping(value = "/task")
public class taskcontroller{
@autowired
private taskfactory taskfactory;
@postmapping(value = "/savetask")
public jsonobject savetask(task task){
basetaskservice currenttask = taskfactory.gettask(task);
return currenttask.savetask(task);
}
@postmapping(value = "/taskdetail")
public jsonobject taskdetail(task task){
basetaskservice currenttask = taskfactory.gettask(task);
return currenttask.taskdetail(task);
}
@postmapping(value = "/memberlist")
public jsonobject memberlist(task task){
basetaskservice currenttask = taskfactory.gettask(task);
return currenttask.memberlist(task);
}
@postmapping(value = "/memberdetail")
public jsonobject memberdetail(task task){
basetaskservice currenttask = taskfactory.gettask(task);
return currenttask.memberdetail(task);
}
@postmapping(value = "/exporttask")
public jsonobject exporttask(task task){
basetaskservice currenttask = taskfactory.gettask(task);
return exporttask(task);
}
}
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
浅析我对 String、StringBuilder、StringBuffer 的理解
使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
Springboot整合freemarker 404问题解决方案
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
网友评论