繁体   English   中英

填充了许多子类的类取决于字段值

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

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