在我的案例中如何避免代码重复?

jtjikinw  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(171)

我目前正在编写将一个数据模型转换为另一个数据模型的代码。更准确地说,这是一个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%相同的,只有少数方法是不同的,因为在这两个包中有些类有不同的名称。
我的下一个问题是,我以后可能会为另一个版本实现一个转换器,该版本也将具有类似的功能,我不想为每个版本重复代码。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题