首页 > 解决方案 > 在我的情况下如何避免代码重复?

问题描述

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

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

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

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

标签: javaoptimizationdesign-patternscode-duplication

解决方案


推荐阅读