我只是調查一個使用nHibernate的現有項目的源代碼,發現爲每個實體類都創建了接口。例如ICustomer for Customer class。我只是想知道這種模式的優點是什麼,因爲ICustomer主要包含屬性和很少的方法。爲每個域對象創建一個接口是一個好主意嗎?
2
A
回答
9
我會說不。接口將行爲與實現分開,以便後者可以在不影響接口的客戶端的情況下被換出。
如果您的域對象不需要不同的實現,我不會看到接口的需要。只有在需要動態代理生成或方面或更改實現時才引入它們。
1
我不同意前面的評論......雖然與控制反轉(IoC)和依賴注入等模式相結合,但它使得彼此之間的隔離更容易。這簡化了單元測試,模擬,並且還可以導致更鬆散耦合的體系結構。這仍然可以在沒有接口的情況下實現,儘管你需要確保你沒有封閉你的類並使得成員是虛擬的,這樣你仍然可以模擬,生成可以接受的代理等等。最後,使用接口迫使你放棄與任何有關的假設一個具體的實現,而是側重於接口定義所代表的契約。
相關問題
- 1. 設置視口每一幀都是一個好主意嗎?
- 2. 給自己分配一個對象是個好主意嗎?
- 3. 這是設計一個好主意 - 接口和抽象類
- 4. 當Path是一個接口時創建一個路徑對象?
- 5. 我應該爲每個模型創建一個接口嗎?
- 6. 重新使用ADO.NET命令對象是一個好主意嗎?
- 7. 重新創建Win32頭文件是一個好主意嗎?
- 8. 創建'太多'類是一個好主意嗎?
- 9. 聚合ViewModels是一個好主意嗎?
- 10. django:是@csrf_exempt一個好主意嗎?
- 11. 在每個viewmodel有一個serviceclient實例是一個好主意嗎?
- 12. 有一個服務只是爲了註冊意圖是一個好主意嗎?
- 13. 從Managed C++中的BSTR創建一個System :: String對象 - 這是一個好主意嗎?
- 14. 在Javascript中是一個異步類是一個好主意嗎?
- 15. MSMQ是一個好主意
- 16. 我應該每次創建一個新對象還是創建一個對象?
- 17. 爲每個用戶使用SqlCacheDependency是個好主意嗎?
- 18. 用一對索引STL映射是一個好主意嗎?
- 19. 爲每個用戶創建一個文件夾的不好主意?
- 20. 是一個抽象的CRUD控制器是一個好主意嗎?
- 21. 緩存javax.sql.Datasource對象的單個實例是個好主意嗎?
- 22. 我應該將PDO對象傳遞給每個對象,還是爲每個對象創建一個新對象?
- 23. 將亞馬遜Dynamo中的對象存儲爲Json是一個好主意嗎?
- 24. 爲會話值的鍵名創建枚舉是一個好主意嗎?
- 25. 我們可以創建一個接口的對象嗎?
- 26. 創建一個對象了每個文件的進口
- 27. 能創建一個對象來存儲多個域嗎?
- 28. 傳遞一個Command對象/讀者到一個函數是一個好主意嗎?
- 29. 對於這種情況,一個班級變量是一個好主意嗎?
- 30. Node.js對象實例是否爲每個用戶創建一個對象?
+1因爲它太容易在各處使用接口。話雖如此,如果您需要在任何地方使用「極少數方法」,或者如果Customer對象的構造函數執行任何業務規則,請準備好提取接口。你不想創建一個有效的具體的客戶實例,只是爲了單元測試其他類。 – 2010-05-11 15:35:49
接口對版本控制問題也是臭名昭着的。如果你沒有特別需要定義一個接口,不要。 – Will 2010-05-11 15:57:28