[英]Class with many subclasses filled depend on field value
我的數據結構有問題。
public class Disposition{
private long Id;
private DispositonType dispositonType;
private DispositionDetailsA dispositionA;
private DispositionDetailsB dispositionB;
...
}
數據庫'disposition'中有表,並且有很多表'disposition_details_*'
我已經導出到另一個數據結構,我需要將這些數據轉換為這個新的數據結構。 有些字段對於 disposition_details_* 是通用的,有些字段僅對於一個 dispositionType 是唯一的
現在我對 disposition_details_* 中常見的每個字段都有很大的 switch case,但它開始出現問題,我想重構它,但我不知道我能做什么?
我沒有關於制作接口,但我不確定它是否會正常工作,因為即使字段具有相同的信息,字段也可以具有不同的名稱。 我無法將常見信息分離到另一個表格,因為它正在生產中......
你能給我任何解決方案嗎? 先感謝您。
最好的問候,帕特里克
//編輯
public class Disposition {
private long Id;
private DispositioType dispositionType;
private DispositionDetailsA dispositionDetailsA;
private DispositionDetailsB dispositionDetailsB;
private DispositionDetailsC dispositionDetailsC;
private DispositionDetailsD dispositionDetailsD;
}
public class DispositionDetailsA {
private long Id;
private Dispositon disposition;
private String localBankAccount;
private boolean isForeignBankAccount;
private String foreignBankAccount;
private String foreignBankSwift;
private String departmentName;
}
public class DispositionDetailsB {
private long Id;
private Dispositon disposition;
private String localBankAccount;
private boolean isForeignBankAccount;
private String foreignBankAccount;
private String foreignBankSwift;
private String customerName;
private String documentNumber;
}
public class DispositionDetailsC {
private long Id;
private Dispositon disposition;
private String localBankAccount;
private boolean isForeignBankAccount;
private String foreignBankAccount;
private String foreignBankSwift;
private boolean isExportable;
private String documentNumber;
private String documentTitle;
}
public class DispositionDetailsC {
private long Id;
private Dispositon disposition;
private String departmentName;
private String customerName;
private String documentDescription;
}
@Getter
@Setter
public class ExportDataStructure{
private long Id;
private String localBankAccount;
private boolean isForeignBankAccount;
private String foreignBankAccount;
private String foreignBankSwift;
private String departmentName;
private String customerName;
private String documentNumber;
private String documentTitle;
private String documentDescription;
}
public class Exporter{
public ExportDataStructure exportDisposition(Disposition disposition){
ExportDataStructure export = new ExportDataStructure();
export.setId(disposition.getId());
export.setLocalBankAccount(this.exportLocalBankAccount(disposition));
...
}
private String exportLocalBankAccount(Disposition disposition){
switch(disposition.getDispositionType()){
case DispositionA:
return disposition.getDispostionDetailsA().getLocalBankAccount();
case DispositionB:
return disposition.getDispostionDetailsB().getLocalBankAccount();
case DispositionC:
if(disposition.getDispositionC().isExportable()){
return disposition.getDispostionDetailsC().getLocalBankAccount();
}
else return null;
case DispositionD:
return null;
default:
return null;
}
}
}
使用處理必要邏輯的接口。
public interface DispositionInterface {
String getExportableBankAccount()
}
class DispositionDetailsA implements DispositionInterface {
@Override
public String getExportableBankAccount() {
return localBankAccount;
}
}
class DispositionDetailsB implements DispositionInterface {
@Override
public String getExportableBankAccount() {
return isExportable ? localBankAccount : null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.