2011-07-08 110 views
0

我們假設我有User類和兩個子類EmployeeCustomer。我在DB中用一個列來指定用戶類型,將此層次結構實現爲一個按層次結構的表。查詢此表時,我需要返回正確類型的對象。獲取用於按層次結構表結構的DAO

我需要像CustomerDAOEmployeeDAO每種類型的對象單獨的DAO,所以每個返回各自CustomerEmployee對象。如果是的話如何從DAOFactory讓他們不使用:

if(type.equlas('customer')) 
    return customerDao; 
else 
    retrun employeeDao; 

由於實施User的類型可以改變,我不希望改變條件的每一次。

或者還有其他方法嗎?任何想法將不勝感激。

注意:我沒有使用任何ORM框架,也沒有計劃使用它。

+0

你能說一點關於你的類層次結構? Employee是User的一個子類,還是兩個實體之間存在某種聯繫?此外,您期望從DAO返回哪些參考類型? – jtoberon

+0

@jtoberon是員工和客戶是用戶類型。我所有的是用戶ID。基於這些ID,我必須查詢同一個表,如果用戶類型爲customer,則獲取'Customer',如果類型爲employee,則獲取'Employee'。 – doctrey

回答

0

如果您的每種類型的持久性代碼是相同的,那麼您可以有1個通用的DAO。

所以你的用戶刀,可能是這樣的:

interface DAO<T, ID> { 
    T create(T t); 
    T read(ID id); 
    T update(T t); 
    void delete(T t); 
} 

class UserDAO<T extends User> implements DAO<T> { 
    // Your methods for crud operations will be limited to types of User. 
} 

那麼你的工廠類可以簡單地通過指定正確的類型實例化正確的DAO。

class DAOFactory { 
    public UserDAO<Employee> getEmployeeDAO() { 
    return new UserDAO<Employee>(); 
    } 
} 

問候
優素福

+0

沒有每個DAO的代碼是不一樣的。每個需要填寫各自的對象數據。我想這樣我仍然需要檢查'if ... else'中的對象類型以獲取所需的DAO。 – doctrey

+0

我沒有看到檢查的必要性,如果你的工廠有每種類型的方法......?您的if語句意味着您返回的DAO是通用的。是這樣嗎? –

+0

也許我在這裏錯過了一些東西,但是我不需要知道我想要什麼類型的DAO,在DAO工廠調用正確的方法。無論如何感謝您的回覆。我試圖以另一種方式解決問題,以消除對多個DAO的需求。下次我面臨類似的問題,我想我會嘗試反思。 – doctrey