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