在我的情况下,如何避免代码重复?

时间:2021-07-27 08:54:12

标签: java optimization design-patterns code-duplication

我目前正在编写将一种数据模型转换为另一种数据模型的代码。更准确地说,它是一个 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");
    }
}

问题在于包内的 LegListLeg 不同。因此,在第一种情况下,它们是从 1.23 版生成的 POJO 类中导入的,而在第二个示例中,它们是从 1.29 版中的 POJO 类中导入的。

转换的算法几乎相同,我还有许多其他方法 100% 相同,只有少数方法不同,因为这两个包中有些类的名称不同。

我的下一个问题是我以后可能会为另一个版本实现一个转换器,该版本也具有类似的功能,我不想为每个版本重复代码。

0 个答案:

没有答案
相关问题