0

目前我正在重構一個巨大的單片asp.net mvc的解決方案(運行作爲一個網站/門戶網站),並提取類庫與方法重構多門戶解決方案asp.net mvc的

  1. 通用的業務邏輯(可用於創建類似的門戶)
  2. 核心業務邏輯(即可以用作域邏輯)
  3. 公共儲存庫的邏輯
  4. 核心庫邏輯
  5. 門戶特定的業務邏輯(如果通用業務邏輯犯規用這種方法做)
  6. 門戶庫特定的邏輯(如果公共資源庫的邏輯沒有做的話)

的問題,因爲我看到的是,在引入類似門戶網站,我將有時間創建其特定的業務邏輯層 和存儲庫邏輯層,如果需要出現,這將增加解決方案中的項目數量(擔心會變得難以管理)

如何在可管理項目方面實現多門戶解決方案?

回答

1

我一直處於類似的情況,有一堆MVC站點共享許多常用功能。

我們所做的首先是在一個單獨的解決方案(我們稱之爲「全局」)中隔離所有這些常見的東西。該解決方案的結構與所有MVC站點幾乎相同,並且包含「全局」特定業務邏輯,接口,實體,存儲庫和UI組件(即:頁眉和頁腳,登錄功能等)。這些常見的功能組織在portables areas中,只要您在其中一個MVC站點中需要其中的一個,就可以使用專用的Nuget包進行部署。

爲了能夠測試我們開發的所有便攜式領域,無需部署它們,我們在Global sln中創建了一個「啓動器」站點。這個網站從未被部署;它僅爲測試目的而構建。

我們的MVC架構不是常見的n層架構,而是Onion架構。如果你有興趣,請看看所有related StackOverflow questions。我們所有的MVC站點都在使用StructureMap DI,以便在啓動時將我們使用的所有接口與正確的實現綁定。全球擁有自己的DI容器配置部分。其中StructureMap結合所有

GlobalConfig.Init(); 
GlobalConfig.RegisterAllAreas(); 

Init方法是:你必須做的事情正確運行的唯一的事情,就是調用MVC網站的Global.asax文件中的這2種方法該主機的便攜領域接口與正確的實現和RegisterAllAreas方法註冊便攜式區域路由和捆綁。這兩個方法必須在MVC站點自己的路由,綁定和DI之前註冊。

這裏是全球SLN文件夾結構:

Global sln folder structure

Web.xxxx項目都是你需要創建不同的便攜式領域。即使您的MVC網站只需要用戶帳戶共享功能,最好將事情分開以避免需要始終部署所有內容。

這裏是在Web.xxxx項目結構的一個仔細一看:

Web.xxxx project structure

便攜式區域項目被稱爲xxxx.Area,它包含的區域的所有視圖和控制器。它也有xxxxAreaRegistration.cs,它定義了該區域的路由和捆綁。

視圖模型和構建器位於名爲xxxx.ViewModel的單獨項目中。

xxxx.Domain和xxxx.DomainModel項目是存儲區域的所有服務實現和域模型的地方。 Xxxx.Data是該區域存儲庫實現的地方。

所有地區的服務和存儲庫接口都存儲在合同項目中(見圖#1),並可以通過特定的Nuget包單獨部署。

這是我們在這裏組織事物的方式的大圖,如果您想要使用這種架構,請不要猶豫,如果您需要更多信息和細節。

希望有幫助!