我目前正在開發一個應用程序,它在設計上有一個三層體系結構。它由一個管理網站,一個WCF Web服務和一個數據庫組成。當然,網站並不直接連接到數據庫,因此所有請求和響應都必須通過該服務。這個「問題」是有幾個實體參與了這個應用程序,並且對於其中的每一個我都必須支持基本的CRUD操作等等,這使得服務在單個端點中擁有超過30種方法。由於我已經不得不增加最大消息大小,所以我開始問自己是否在單一服務中使用所有這些方法並不是太多。你怎麼看?我有什麼替代方案?WCF-有多少種方法太多?
回答
我真的不能給你一個很好的答案,因爲它取決於你的應用程序的要求和複雜性。通常,CRUDy服務界面是您應該避免的反模式。數據層和服務層之間不應該有一對一的映射關係。如果有的話,那麼服務層就不是拉扯自己的體重。 SOA是一個巨大的話題,我只是開始討論,但我的理解是SOA應該封裝許多操作的邏輯。即(認證,授權,記錄,縮放,交易等)
http://msdn.microsoft.com/en-us/library/ms954638.aspx
你聽說過Repository模式的?這是一種軟件設計模式,其中特定的類/程序集封裝了將數據導入和導出數據庫所需的邏輯。它的重量更輕,然後使用全面的服務,如果您想要的是將應用程序從數據庫中解耦的好方法,則可能是您需要的全部功能。 Repository模式的一個非常簡潔的功能是,您可以使Repository的所有方法成爲Interface,然後使MockImplementation在您的業務/ UI層上獨立於數據庫執行測試。
有沒有真正的具體回答這個問題。這是一種折衷方式。儘量保持單一責任原則。一對選項是:
- 爲每個數據類型創建一個端點,將CRUD操作放入每個端點。這意味着通過維護更多的端點配置。
- 將您的方法分爲多個文件,但使用部分類將它們留在一個類中。
- 如果您所做的只是針對每種數據類型的CRUD操作,那麼也許可以使用WCF Data Services/OData。
通過WCF服務實現重複的CRUD功能可能會很痛苦,但如果服務沒有全局暴露(因此您不必爲認證/授權付出很多代價),您可以節省大量的通過使用以下兩種方法之一:ADO.NET數據服務或WCF RIA服務。
單個服務中的30個方法是否是一個糟糕的設計 - 這是不明確的。這就好比問一個有30名成員的班級是不是一個糟糕的設計 - 有些人會說這是絕對的,大多數人會評論「這取決於你在做什麼」。
儘管如此,對CRUD使用HTTP會帶來一些限制 - 您提到的其中一個限制。除非增加消息大小,否則無法插入/更新大批量。除非您以某種方式明確涉及通過http進行的事務,否則您還可能會遇到一些嚴重的事務處理問題。
- 1. dot.Net代表有多少種方法?
- 2. 有多少層太多?
- 3. 有多少個EJB太多?
- 4. 有多少NSTimers太多?
- 5. 有多少查詢太多?
- 6. STL有多少太多?
- 7. 有多少任務太多?
- 8. JSON有多少JSON太多?
- 9. 對於一個類,有多少個靜態方法太多?
- 10. 多少javascript太多
- 11. 多少是太多?
- 12. 調用WCF服務的多種方法
- 13. 計算方法中有多少種方法?
- 14. 每種方法應該運行多少種測試方法?
- 15. JVM中有多少個對象太多?
- 16. SQL SSIS有多少步驟太多
- 17. 有多少NGinx重定向太多?
- 18. memcached中有多少個鍵太多?
- 19. 有多少記錄/對象太多?
- 20. ReactJS中有多少組件太多?
- 21. MVC中有多少GUI邏輯太多?
- 22. 有多少頂點緩衝區太多?
- 23. 有多少PHP包含太多?
- 24. 有多少Ruby線程太多?
- 25. SQL Server 2005表有多少列太多?
- 26. mysql-query中有多少where-clause太多?
- 27. 有多少班級太多? Rails STI
- 28. 有多少構造函數太多?
- 29. 表中有多少個「太多」字段?
- 30. 有多少列是太多列?