2013-05-04 49 views
1

從設計的角度看,有一個全局對象從spring上下文中返回單例,有什麼不對嗎?返回彈簧單例的全局對象

我剛剛在一個新的地方開始工作,DAO都通過一個名爲DAOUtils的全局對象來訪問,其中每個DAO從spring上下文中獲取單例DAO bean。因此,如果您想要保存採購訂單,例如,您會說

DAOUtils.getPurchaseOrderDao()。savePurchaseOrder(po);

或類似的東西。

我已經習慣將DAO按需要注入到需要它們的每個類中,所以這讓我感到很震驚。從設計的角度來看它有什麼問題嗎?如果是的話,你能解釋爲什麼它是一個壞主意嗎?

我可以看到它讓單元測試變得困難,因爲沒有辦法阻止代碼調用實際的DAOUtils類..?我想這可能會被描述爲緊耦合引起的問題?

+0

你說得對。設計這個的人使用了Spring而不明白什麼是依賴注入。 – 2013-05-04 08:26:54

+0

最好的規則是不要使用靜態工具類,也不要使用「新」來表示非域對象 – 2013-05-04 08:28:05

+0

也讀取Clen代碼。創建一個* Util類是通往mudball的道路。您需要爲課程添加任何新的DAO。這個Util類依賴於每個DAO都不太好。 – 2013-05-04 08:50:18

回答

4

這是不好的設計模式,因爲你不能用別的東西代替DAOUtils,用於測試目的。

Spring使用依賴注入,這是檢索DAO實例的最好方法。

+0

謝謝。這有幫助。 – Bruce 2013-05-04 08:39:05