簡體   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