我看过马丁福勒重构的例子Here
不确定如何以spring-boot方式(IoC)实现它。
我正在开发spring web应用程序。
我有一个REST控制器,它接受studentId
和fileType
并以给定fileType
格式导出学生的数据。
控制器调用ExportService
exportFile()
方法,看起来像
@Service
public class ExportServiceImpl implements ExportService {
public void exportFile(Integer studentId, String fileType) {
if (XML.equals(fileType)) { exportXML(studentId);}
else if()... // and so on for CSV, JSON etc
}
}
将条件重构为多态,
首先我创建了抽象类
abstract class ExportFile {
abstract public void doExport(Integer studentId);
}
然后我为每个fileType导出创建服务。例如,XML导出以下是服务,
@Service
public class ExportXMLFileService extends ExportFile {
public void doExport(Integer studentId) {
// exportLogic will create xml
}
}
现在我的ExportService应该是,
@Service
public class ExportServiceImpl implements ExportService {
@Autowired
private ExportFile exportFile;
public void exportFile(Integer studentId, String fileType) {
exportFile.doExport(studentId);
}
}
现在我被困住了:(
无法得到,
@Autowired
ExportFile
如何根据fileType
了解要引荐的具体服务?
如果我错了,请纠正我。非常感谢您的回复:)