[英]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.