java - 在我的情况下如何避免代码重复?
问题描述
我目前正在研究将一种数据模型转换为另一种数据模型的代码。更准确地说,它是一个 Hafas 模型,但不是很重要。问题是我必须支持这个模型的多个版本。我目前有一个 1.23 版和 1.29 版的转换器。数千行代码,大约 50 种方法,97% 相同。
因此,我首先需要将数据反序列化为我构建的 POJO 类,然后使用我的算法将它们转换为 XML。
问题是这些版本使用了我的 POJO 类的不同包,它们有 99% 的相同名称。
这是一个示例: 1.23 版本的转换器:
public void convertHafasLegsInsideCustomTrip(TripStructure myTrip, LegList hafasLegs) {
for (Leg hafasLeg :
hafasLegs.getLeg()
) {
// We have to convert each Hafas Leg to Trias TripLegStructure
TripLegStructure myTripLeg= convertToTriasTripLeg(hafasLeg);
if (myTripLeg!= null)
myTrip.getTripLeg().add(myTripLeg);
else
throw new NullPointerException("ERROR: HAFAS TripResult conversion ended up with NULL object");
}
}
V1.29 转换器:
public void convertHafasLegsInsideCustomTrip(TripStructure myTrip, LegList hafasLegs) {
for (Leg hafasLeg :
hafasLegs.getLeg()
) {
// We have to convert each Hafas Leg to Trias TripLegStructure
TripLegStructure myTripLeg= convertToTriasTripLeg(hafasLeg);
if (myTripLeg!= null)
myTrip.getTripLeg().add(myTripLeg);
else
throw new NullPointerException("ERROR: HAFAS TripResult conversion ended up with NULL object");
}
}
问题是内部包装LegList
和Leg
内部包装不同。因此,在第一种情况下,它们是从生成的 1.23 版 POJO 类中导入的,而在第二种情况下,它们是从 1.29 版的 POJO 类中导入的。
转换的算法几乎相同,我还有许多其他方法 100% 相同,只有少数不同,因为这两个包中的某些类具有不同的名称。
我的下一个问题是我以后可能会为另一个版本实现一个转换器,该版本也将具有类似的功能,我不想为每个版本复制代码。
解决方案
推荐阅读
- r - 使用 dplyr 在 R 中按组过滤数据框
- assembly - 在装配中消除 J 操作?
- java - 使用 JavaCPP 在 Java Android 应用程序中运行 C++ 代码
- python - 是否可以在 numpy 中更改数组的特定元素?
- algorithm - 分治算法以什么比例停止为 O(N * log(N))
- python - Python / 请求 - 无法正确发送 POST,尽管它在 Postman 中工作
- java - Android 列表视图未从数据库动态填充
- verilog - 如何在 xilinx vivado 中找到完全使用的 LUT-FF 对的可用数量?
- javascript - TypeError:无法读取 ReactDataGrid 中未定义的属性“长度”
- python - WSL 问题:错误:意外错误 - [Errno 1] 不允许操作