我們有一個典型的n層java應用程序,並且我注意到我們的數據訪問層具有類型爲FooDAO和FooDAOImpl的DAO。我期待證明這兩者的必要性,這是我的分析。需要單獨的接口和用於DAO的impl
- 如果您對同一接口有多個實現,抽象是有幫助的。但鑑於我們已經選擇了用於DAOImpl的框架(比如iBATIS),它真的需要嗎?
- 幫助代理通過春天。從我所收集的內容來看,具有接口的類可以很容易地進行代理(使用JdkProxy路由),而不是無接口的類(其中選擇了cglib路由),並且有一個類需要代理的子類。子類化的問題在於,代理的類是最終的,或者沒有默認的構造函數 - 兩者在數據訪問層上都不太可能。性能曾經是一個因素,但從我所聽到的,它不再是一個令人擔憂的原因。
- 幫助嘲笑。具有接口的類更適合被模擬框架嘲笑。我只聽過這個,但在實踐中沒有看到它 - 所以不能真正指望它,但也許是因爲上面#2中提到的相同因素。
有了這些觀點,我不覺得真的需要一個單獨的FooDAO和FooDAOImpl,其中一個簡單的FooDAO應該足夠了。隨時糾正我提到的任何問題。
在此先感謝!
除非我錯了,你不要在這裏問一個問題嗎?使用接口與注入接口的好處已經在你的'問題'中陳述了...... – steelshark
是的,你已經闡述了使用接口和實現DAO的三個很好的理由。我會向你提出相反的結論,即需要有一個接口! –
@ user935439問題出在每個要點上。儘管我們原則上同意接口的好處,但我想收集關於減少我必須編寫和維護的類文件的意見的觀點,因爲在此類用例中接口的好處並不完全明顯。你有沒有用例子知道,當你有涉及接口的時候,嘲笑更容易?謝謝! – Kilokahn