Asp.net-Mvc

使用 WCF/OData 作為訪問層而不是直接使用 EF/L2S/nHibernate 的論點

  • March 23, 2010

我們主要開發低流量但高度專業化的 Web 應用程序。通常我們使用 L2S、EF 或 nHibernate 作為訪問層,然後將 Asp.Net MVC 扔給它,對於正常的 crud 操作,我們直接查詢 ISession/DataContext,但對於更高級的功能/副作用,我們將它放在某種服務層。

現在,我正在考慮通過 OData(WCF 數據服務)發布數據並從控制器(或者當一個好的模板引擎出現時甚至從 jQuery 查詢)並通過 WCF 服務(或作為自定義方法)發布服務操作在 WCF 數據服務上?)。這種架構有什麼優點/缺點?

除了更高的複雜性和延遲之外,我是否獲得了一些東西?更好地分離關注點(或者這只是一種錯覺)?

編輯: 案例如創建一個完整的 ajax 驅動解決方案是個好主意嗎?WCF RIA 服務? 還是鬆了太多的靈活性?感覺就像您可以完全從您的邏輯中調度您的視圖,哎呀,應該能夠只編寫純 HTML,甚至不需要 asp.net MVC?但我想有很多新的問題出現了?

正如 TomTom 所提到的,您不想在流程中為 OData 支付環回成本。如果您可以直接看到您的數據庫並且它是您自己的應用程序的數據庫,那麼沒有理由將 WCF 數據服務放在中間。我將繼續使用您提到的其他選項之一(L2S、EF、nHibernate)。

現在,如果您需要通過 http 端點公開數據以供其他應用程序使用,或者甚至為您自己的應用程序(如果客戶端中有一些需要從伺服器訪問數據的 jQuery 程式碼),那麼肯定 OData 端點可能會有所幫助並且WCF 數據服務是創建數據服務的最簡單方法。

不要這樣做。對不起,但這是一種愚蠢的過度設計的方法。您在一個程序中,並且堅持執行網路連接並將所有傳遞的數據編碼為 XML 並返回,再加上在查詢語義有限的 HTTP 連接上執行它?不要告訴任何人你甚至嘗試過。

關注點分離在這裡是一種錯覺——您將高度優化的域模型替換為簡化的數據層。

這就是說:我喜歡 OData - 很棒。但它不是一種程序內技術,它是一種前端技術,如 ASP.NET MVC - 只是不針對最終使用者,而是針對集成到您的數據中的另一個程序。它應該在類似的場景中使用,並且在通過信任邊界暴露數據時(例如,Silverlight 是一個信任邊界,因為請求可以被偽造)。

它沒有被優化來替換程序中的高端應用程序執行時層,如 NHibernate。

引用自:https://stackoverflow.com/questions/2498796