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