2015-05-25 77 views
1

在上週末我已經學習了ASP.NET Web API課程,但我很難理解它在使用方面的合適性。做了一些谷歌研究,但仍然困惑。ASP.NET Web API在解決方案架構方面適合哪裏?

  1. 我可以看到它對數據庫實現CURD操作是好的,但是我應該在web api中實現業務邏輯嗎?

  2. 假設我有一個工作單元。檢查客戶是否存在於數據庫中,如果是,則獲取最近的10個訂單這應該以web-api中的一種方法還是兩種方法檢查客戶和其他人以獲取訂單?到目前爲止,我已經看到在單個數據庫資源上實現CURD的示例。

  3. 如果我有使用網絡API想象的應用架構,我認爲

前端 - 在MVC 業務邏輯 - 獨立的控制器,並要求業務邏輯類庫這反過來又調用Web API ? 數據庫邏輯 - 使用Web -API來實現CURD?

+1

你有沒有聽說過基於REST的API? –

回答

0

最好是讓事情變得簡單,這裏是我的結構有一個大的(1000的用戶)的企業應用程序:

2 ASP.net項目,有3個其他類別庫。

1st asp.net Project - 是一個標準的MVC應用程序,但大多數情況下這只是用作所有HTML/cshtml,javascript和css資源的容器。我們使用很少或沒有剃鬚刀/控制器MVC語法。這個「前端」項目是使用angular.js(單頁應用程序-SPA體系結構)進行非常JavaScript驅動的,並調用回第二個Asp.net web api項目來收集和收集所有數據。

2nd asp.net project - 正在使用ASP.net Web API 2模板。該項目負責所有數據收集。該項目從多個地方進行調用,移動/平板電腦應用,第一個asp.net項目,並向第三方公司提供,以便與我們的平臺集成。

類lib 1(可移植類庫) - 是我們的數據模型項目,它跨多個層共享,包括業務層,數據層,web API層,因爲它是可移植的類庫,我們的移動項目。在可能的情況下,我們將重複使用從db到API層的相同模型,有時這是不可能的,我們使用業務層在模型之間進行映射。

Class Lib 2 - API和MVC項目均提及。這個dll包含了我們所有的業務邏輯,有時候這只是一個通過層,在CRUD操作的情況下只做很少的邏輯,只能通過數據層調用,但大多數情況下所有業務邏輯都與檢查字段輸入有關,像上面描述的那樣對你的數據庫進行多重調用都包含在這個背後。正如我之前說過的,我們第一個asp.net項目的邏輯很少,我們從前端項目中引用這一點的唯一原因是因爲該層包含用於建立的所有認證,授權和權限邏輯,因爲用戶可以訪問給定頁面。

類庫3 - 只從我們的業務層引用,該層完成所有數據庫和中間件與多個數據庫平臺的交互。

通過上述結構,它可以將事物拆分爲允許注入MOQ接口,允許更輕鬆地進行測試,並允許在多個項目甚至多個設備(iOS/android/windows應用程序)中最好地重用。我們將2個asp.net項目分開的唯一原因是基於基礎設施原因,每個項目的流量概況完全不同,因此它允許我們優化適合流量概要的硬件 - 許多人可以將它們合併到一個項目中。

+0

感謝您提供詳細的回覆。 – Hakunamatata

+0

當你提到你的MVC項目正在調用WebAPI時,爲什麼你的類庫2在MVC項目中被引用,因此,不能一切都通過WebAPI。 – Guanxi

+0

hi @Guanxi 99%的瀏覽器都通過web api。然而,在我看來,上面提到的應用程序對於單頁應用程序中的所有內容來說都太大 - 因此我們使用「混合單頁應用程序體系結構」,其中包含幾個SPA的集合。因此,要控制允許哪個用戶訪問給定視圖/控制器的權限是1%,那麼就是所有認證/權限邏輯。可以說,這也可以轉移到WebAPI,但我們有一些傳統配合防止這種情況發生。 – BMac