2013-08-06 69 views
1

我有一個域模型A,我想將其轉換爲另一個域模型B.因此,對於每個模型元素,我需要將其轉換爲一個或多個B元素。將java域模型從域A轉換爲域B

域A看起來很簡單,如:

public class Model 
{ 
    public List<ModelElement> elements; 
} 

public class ModelElement 
{ 
    public SubElement subElement; 
} 

public class SubElement 
{ 
    public String someData; 
} 

域B貌似

public class Layout 
{ 
    public List<Layer> layers; 
} 

public class Layer 
{ 
    public LayerData layerData; 
} 

public class LayerData 
{ 
    public int layerNumber; 
    public String name; 
} 

這是真的簡單,我的模型是一個有點複雜,但解釋我認爲這是 足夠。

所以我的問題是,什麼是轉換器的好方法。

我以爲寫了一個類,它穿過模型並轉換每個元素。到最後,我有一個巨大的轉換器類,這不是很好。

我的另一種方法是建立一個工廠,它爲域A的每個元素提供一個特定的轉換器。然後每個轉換器可以調用工廠來獲取子元素的轉換器。不幸的是我需要一些元素轉換額外的數據。所以要在某些轉換器中使用它,我必須將它們傳遞到所有上轉換器,這聽起來不太好。

什麼是一個很好的方法來做到這一點?

感謝您的幫助 西蒙

回答

0

如果你的數據模型是分層次和有限的,我會採用的第一種方法,但將其職責劃分爲幾類。讓主要類發佈需要轉換的數據。然後它調用轉換器類(模型/佈局),用於轉換和調用子轉換器(ModelElement/Layer level)等。訣竅是總是傳遞一個對主類的引用,它將像轉換器的信封或數據存儲一樣工作。通過這樣做,您將得到一個好的解耦設計,其中包含單個責任人:提供數據,轉換單個類等等。

這只是我要去的設計草圖。這是我所能得到的最好信息。您可能想要將其修改爲,並可能添加一些抽象(例如,信封類的數據發佈減少的接口)。

0

你可能想看看DOZER。該lib將允許字段的通配符轉換(如果它們共享相同的名稱)並允許自定義轉換器。

相關問題