2014-10-07 53 views
1

在Web應用程序的規劃階段,我希望有一些建議。不同層次的Web API 2

我在不同層次上繪製DAL和Web MVC 5,我知道這個項目需要與其他系統進行一些集成。

我的問題是:

要善於創造DAL和Web MVC 5之間的網絡API 2層?

這裏主要傾向於集中數據訪問格式並儘量減少未來的維護。

+0

DISTINCT層是什麼意思?你期望與其他系統進行什麼樣的整合?只需通過Web API,對吧? – 2014-10-13 14:39:54

+0

對於第一個問題,我的意思是DAL和Web MVC 5在單獨的項目中。第三個是YES。 – Onaiggac 2014-10-13 15:04:40

回答

3

Web API和Web MVC層都是邏輯表示層的一部分,通常它們彼此相鄰並且不會混合。這裏只是我頭頂上的幾個缺點:

  1. 性能 - Web MVC項目中的冗餘HTTP往返。
  2. 問題分離 - 大多數情況下,API提供的功能與用於相同項目/應用程序的UI差別很大。您可能想要通過嚴格的合同將API限制爲少數方法。如果您希望Web API成爲Web MVC和DAL之間的一個層,那麼您將不得不公開UI所需的所有功能。你也可能想要有不同的授權和認證機制。很多時候API異常處理也是不同的,以及輸入驗證。
  3. 維護 - 每次您需要對UI進行必要的更改時,您必須確保它不會制動您的API客戶端。另外,API版本控制是一個非常重要的主題,並且將其與大多數UI更改混合在一起使得此過程更加困難。

您可以在這裏的合同版本閱讀起來 - Versioning Strategies

如果我是你,我會做兩臺Web API和Web MVC層儘可能薄,因爲他們應該在完美的世界。然後添加一個業務層並在Web API和Web MVC中使用它。業務層應該封裝你想要的所有通用邏輯並減少維護。所以它應該是

DAL - >業務層 - >網絡API

DAL - >業務層 - > Web MVC框架

希望它能幫助!

+0

我有一些困難來定義什麼是我的業務層。我需要一個虛擬的例子:( – Onaiggac 2014-10-13 21:45:26

+0

我只能使用存儲過程來操縱我的數據和LINQ to Entities來選擇 – Onaiggac 2014-10-13 21:56:29

+0

當然,考慮你的應用程序是一個網上商店,當用戶下訂單時,你應該做一些查詢來製作確保產品仍然可用,然後將訂單保存到數據庫並向用戶發送一封包含訂單ID的電子郵件,因此這三項操作應該放入業務層服務中,您可以使用CreateOrder方法訂購OrderService,然後在此方法中打電話給你的DAL進行驗證查詢並保存訂單實體,然後應該有一個調用smpt服務器來發送電子郵件,這三個操作是業務邏輯,創建訂單時應該總是一起使用 – 2014-10-13 22:59:47