为了账号安全,请及时绑定邮箱和手机立即绑定

代码重复求改进方法

代码重复求改进方法

郎朗坤 2019-05-25 15:28:02
@OverridepublicOptiongetTrafficChartOption(Stringtype,ReportTypereportType,IntegerdeviceId,Integerdirection){Integerdevice=deviceId+1010000;Listdata=chartDao.getTrafficChartData(reportType,device,direction);Stringtitle=Titlehelper.getChartTitle(reportType);Stringsubtitle=Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,direction);Optionoption=newOption();switch(type){case"bar":option=BarOption.BarOptionBuiler(title,subtitle,data);break;case"line":option=LineOption.OptionBuilerhelp(title,subtitle,data);break;case"pie":option=PieOption.PieOptionbuilder(title,subtitle,data);break;}returnoption;}@OverridepublicOptiongetAmmeterChartOption(Stringtype,ReportTypereportType,IntegerdeviceId){Listdata=chartDao.getAmmeterDataChartData(reportType,deviceId);Stringtitle=Titlehelper.getChartTitle(reportType);Stringsubtitle=Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,1);Optionoption=newOption();switch(type){case"bar":option=BarOption.BarOptionBuiler(title,subtitle,data);break;case"line":option=LineOption.OptionBuilerhelp(title,subtitle,data);break;case"pie":option=PieOption.PieOptionbuilder(title,subtitle,data);break;}returnoption;}代码结构非常相似,只是dao层取数据不一样,另外这个switch有没有改进空间,我知道使用eumn来枚举,没写以减少无关代码
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

你的代码是要创建Option类,适合使用工厂方法重构。
//方法参数尽量少于3个,3个以上时建议使用组合对象
classOptionParam{
privateStringtype;
privateReportTypereportType;
privateIntegerdiviceId;
privateIntegerdirection;
//getterandsetter
}
//Option抽象工厂,每个具体工厂都必须继承自抽象工厂
publicabstractclassAbstractOptionFactory{
@Autowired
ChartDaochartDao;
//希望具体工厂实现的方法,交于具体工厂实现
abstractListgetData(OptionParamoptionParam);
abstractStringgetSubtitle(OptionParamoptionParam);
//公共逻辑代码,创建对象调用该方法
publicOptioncreate(OptionParamoptionParam){
assertoptionParam!=null;
assertoptionParam.getReportType()!=null;
Stringtype=optionParam.getType();
Listdata=getData(optionParam);
Stringtitle=Titlehelper.getChartTitle(optionParam.getReportType());
Stringsubtitle=getSubtitle(optionParam);
Optionoption=newOption();
switch(type){
case"bar":
option=BarOption.BarOptionBuiler(title,subtitle,data);
break;
case"line":
option=LineOption.OptionBuilerhelp(title,subtitle,data);
break;
case"pie":
option=PieOption.PieOptionbuilder(title,subtitle,data);
break;
}
returnoption;
}
}
@Component
classTrafficChartOptionFactoryextendsAbstractOptionFactory{
@Override
ListgetData(OptionParamoptionParam){
returnchartDao.getTrafficChartData(optionParam.getReportType(),
optionParam.getDiviceId(),
optionParam.getDirection());
}
@Override
StringgetSubtitle(OptionParamoptionParam){
returnTitlehelper.gettrafficSubText(
optionParam.getReportType().getReportTime(),
optionParam.getDiviceId(),
optionParam.getDirection());
}
}
@Component
classAmmeterChartOptionFactoryextendsAbstractOptionFactory{
@Override
ListgetData(OptionParamoptionParam){
returnchartDao.getAmmeterDataChartData(optionParam.getReportType(),optionParam.getDiviceId());
}
@Override
StringgetSubtitle(OptionParamoptionParam){
returnTitlehelper.gettrafficSubText(optionParam.getReportType().getReportTime(),
optionParam.getDiviceId(),
1);
}
}
使用工厂方法的好处就不多说了,具体可以阅读我的博客
                            
查看完整回答
反对 回复 2019-05-25
?
手掌心

TA贡献1942条经验 获得超3个赞

Stringtitle=Titlehelper.getChartTitle(reportType);
Stringsubtitle=Titlehelper.gettrafficSubText(reportType.getReportTime(),deviceId,1);
Optionoption=newOption();
switch(type){
case"bar":
option=BarOption.BarOptionBuiler(title,subtitle,data);
break;
case"line":
option=LineOption.OptionBuilerhelp(title,subtitle,data);
break;
case"pie":
option=PieOption.PieOptionbuilder(title,subtitle,data);
break;
}
returnoption;
这几行提取出来放在一个方法里调用不就行了
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 447 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号