繁体   English   中英

Java 在两个类几乎相似但包不同但功能相似时避免代码重复

[英]Java avoiding code duplication when both classes are almost similar but different packages, but similar functions

我的项目中有一个文字代码,

private List<String> getAddressLines(PartyAddressDTO partyAddressDTO) {
    List<String> addressLines = new ArrayList<>();
    if (!CollectionUtils.isEmpty(partyAddressDTO.getAddressLines()))
        addressLines.addAll(partyAddressDTO.getAddressLines().values());
    if (addressLines.isEmpty()) {
        if (!StringUtils.isEmpty(partyAddressDTO.getHouseNumber()))
            addressLines.add(partyAddressDTO.getHouseNumber());
        if (!StringUtils.isEmpty(partyAddressDTO.getStreet()))
            addressLines.add(partyAddressDTO.getStreet());
        if (!StringUtils.isEmpty(partyAddressDTO.getCity()))
            addressLines.add(partyAddressDTO.getCity());
    }
    return addressLines;
}

这在三个不同的地方重复,我试图通过声纳分析 go,这是它显示为重复的地方,但问题是,

com.package.module1.party.PartyAddressDTO
com.package.module2.party.PartyAddressDTO
com.package.module3.party.PartyAddressDTO

在我们的三个不同的类中,这是导入,这三个属于不同的包,我不明白为什么那些源模块被这样命名,我无法控制它们的对象,它们也没有扩展一个单一的界面或任何东西,但不得不在我的项目中复制一些代码行对我来说是令人讨厌的。 反正有提取这样的代码吗?

如果 PartyAddressDTO class 的属性/方法对于所有 3 个模块都相同,并且您对这些模块没有任何控制权,那么避免代码重复的最佳方法是拥有自己的实现,如下所示:(请忽略属性名称和方法名称)

public class MyPartyAddressDTO {
  private String name;
  private int age;

  public MyPartyAddressDTO(package1.PartyAddressDTO partyAddressDTO1){
    this.name = partyAddressDTO1.getName();
    this.age = partyAddressDTO1.getAge();
  }

  public MyPartyAddressDTO(package2.PartyAddressDTO partyAddressDTO2){
    this.name = partyAddressDTO2.getName();
    this.age = partyAddressDTO2.getAge();
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }
}

并在整个应用程序中使用 MyPartyAddressDTO

通常,我们会有一个公共模块并有一个内部 pkg,将公共部分提取到那个地方。 所有其他模块都将引用 common,但 common 将被任何人引用,因此将避免循环依赖。 将所有常用类移到那里,可以避免重复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM