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