我目前正在编写将一种数据模型转换为另一种数据模型的代码。更准确地说,它是一个 Hafas 模型,但不是很重要。问题是我必须支持这个模型的多个版本。我目前有一个 1.23 版和 1.29 版的转换器。数千行代码,大约 50 个方法,97% 相同。
所以我首先需要将数据反序列化为我构造的 POJO 类,然后使用我的算法将它们转换为 XML。
问题是这些版本使用了我 99% 相同名称的 POJO 类的不同包。
这是一个例子: 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% 相同,只有少数方法不同,因为这两个包中有些类的名称不同。
我的下一个问题是我以后可能会为另一个版本实现一个转换器,该版本也具有类似的功能,我不想为每个版本重复代码。