2012-03-03 69 views
1

我正在尋找一些最佳實踐/模式來將對象從一個轉換爲另一個。我使用DAO從數據庫加載數據來創建我的域對象。在我的應用程序中,我需要轉換成一個不同的對象,作爲另一個模塊的輸入。 例如,客戶是包含訂單列表的域對象。我需要將其轉換爲對象customerorder。轉換對象的模式

Public class Customer { 
    String customerid 
    List<Order> orders 
} 

Public class Order { 
    Integer id 
    Date orderDate 
} 

/** Transformed objects **/ 
public class CustomerOrder { 
    string customerid 
    Integer orderid 
} 

目前,我有其中有一個方法返回CustomerOrder對象的列表,並實現該接口

Public interface CustomerDTO { 
    List<CustomerOrder> getData(Date date) 
} 

Public class CustomerDTOImpl implements CustomerDTO { 
    Private Customer customer 
    Public CustomerDTOImpl(Customer customer) { 
     this.customer = customer 
    } 

    Public List<CustomerOrder> getData(Date date) { 
     ..... Code to loop through orders and create and return a list with matching order dates 
    } 
} 

對於簡單的一個具體類的接口CustomerDTO,轉換我並不需要一個DTO類但我的轉換非常複雜,我希望爲不同的對象保留轉換邏輯。 最初我有一個轉換器類,它只是遍歷所有對象並創建轉換對象,但我不認爲這是一個很好的設計和思考這個DTO。但我相信有更好的方法來做到這一點。

此外,我需要能夠在幾個對象上使用DTO模式。在這個客戶中只是一個這樣的對象?我有20個不同的對象,我需要將它們轉換爲各自的轉換對象。

任何有關最佳實踐和模式的想法都會非常有用。還有我可以用來更好地擴展它們的任何泛型。

感謝 Javid

+0

讓我直截了當地說,你需要一種設計模式來幫助你處理這樣一個事實,即你試圖解決數據模型設計不好的事實你試圖實現的用例?我猜你對此感到困惑,只是讓它工作而已? 這。這就是爲什麼我不再承擔大型企業Java項目的原因。我建議重構體系結構,這樣可以使數據對象實現其他模塊所需的任何接口。如果這不起作用,請查看適配器模式。 – 2012-03-03 04:19:01

+0

@BenTaitelbaum我同意一部分。這不是數據模型沒有完美設計,而是變革相當複雜,例如。通過不更改我的數據模型以反映最終轉換對象,我可以支持未來的轉換邏輯更改而不更改我的DAO或域模型。我將研究適配器模式。看起來像我的DTOImpl類可能已經在做這件事。謝謝。 – user320587 2012-03-03 14:12:46

回答

0

您需要讓對象擴展或實現另一個對象,以便您可以將它們轉換爲不同種類的對象。我建議尋找多態來做到這一點。這個名字聽起來很可怕,但沒什麼大不了的

0

只寫從DB數據裝載到正確的域對象的新DAO。

+0

@Jeff轉換邏輯可能會改變另一個模塊,因此可能無法更改DAO,因爲數據對於所有模塊都是相同的,除了每個模塊需要對同一數據進行不同轉換(域模型) – user320587 2012-03-04 01:59:58