2011-05-11 61 views
1

這裏注入多個DAO是DAO層和服務層之間的設計問題:服務層在實踐中

在DAO層,有DAO類叫做: 具有Dao1,Dao2,Dao3 ...

在服務層,有服務類稱之爲: 服務1,服務2,服務3 ...

服務1需要注入具有Dao1,Dao2,Dao3

客服2需要注入Dao2,Dao3,Dao4

服務3需要注入Dao3

...

實例創建用戶:

UserService需要注入的UserDAO創建用戶,也UserService需要注入LogDao 記錄系統日誌信息。

看來我們需要做一些重複的工作。實踐中是否有解決方案?我在使用Spring框架時使用了 。使用@Resource註釋在服務類中注入這些Dao。

我的解決方案是: 將所有Dao類(Dao1,Dao2,Dao3 ...)注入DaoCollection類,然後service1,service2,service3 ...全部擴展DaoCollection類。這是好方法嗎?

THX

+1

我不明白DAO和服務類別是否有任何關係,如果DAO是針對不同的方面或內容。你能解釋一下這個構造的背景和目的嗎? – 2011-05-11 06:21:26

+0

@ leet3lite對不起,我的解釋。我已經添加了一些例子。希望它可以幫助。感謝你的時間 – EeE 2011-05-11 06:36:22

回答

5

你必須確定你的服務反正使用DAO的,所以你必須要做到這一點「重複」工作在一定程度上。

根據你使用的框架(如果有的話),聲明不應該是太多的開銷(輸入)。

例在EJB 3+:

class Service1 { 
    @EJB private DAO1 dao1; 
    @EJB private DAO2 dao2; 
    @EJB private DAO3 dao3; 
    ... 
} 

我說你不應該創建一個共同的超類,並注入所有可能的DAO存在。這很可能會使其更難以理解(爲什麼那些DAO在那裏?是否被使用?等),甚至可能存在性能問題,這取決於使用的框架(您可能會將每個DAO注入到每個服務中,從而創建一大堆未使用的DAO實例)。

+0

有道理!謝謝! – EeE 2011-05-11 06:48:04

+2

+1。我還想補充一點,創建一個DAOCollection並將其擴展爲服務意味着繼承,而IoC則是關於對象組合,所以這種想法有失於目的。 – Elad 2011-05-11 07:12:20

+0

使用無狀態會話bean進行DAO不是個好主意 – MyTitle 2012-12-26 08:43:36