單層應用升級到多層應用1

前面我們已經逐步完善了我們的單層應用,但是隨着複雜度提升,單層應用逐漸變得臃腫。爲了更好地應對日益增長的業務需求和保持應用的可維護性,我們需要考慮將單層應用升級爲多層應用。

升級思路

在單層應用中,我們講基礎設施的功能以及業務功能都寫在同一個項目中,這將使得後期複雜度越來越高,可維護性越來越低。
首先先思考,哪些部分是屬於業務無關的基礎功能,哪些是通用的功能數據,哪些是業務功能。
根據這幾個問題,暫時先考慮這樣安排:
業務無關的基礎功能抽離到Core。
通用的功能數據(如枚舉,靜態遍歷)抽離到Shared。
把數據庫相關的抽離成Domain和Data。
然後業務功能暫時還是放在Host。

整理目錄結構

講解完思路,那麼接下來就是按照拆分思路整理目錄結構了。
再來回顧我們單層的目錄結構,如圖:
image.png

開始拆分

Wheel.Core

我們先新建一個Wheel.Core類庫,把Cache,DependencyInjection,Dto,EventBus,Exceptions,Expressions,Extensions,Json,Notifications,Users,Utilities遷移到進去。
這裏需要注意的是,類庫不包含AspNetCore的相關API,編譯會報錯,所以我們需要添加以下框架依賴,在項目文件中添加:

<ItemGroup>
  <FrameworkReference Include="Microsoft.AspNetCore.App"></FrameworkReference>
</ItemGroup>

Wheel.Shared

接下來新建一個類庫Wheel.Shared把靜態類和枚舉類的目錄Const和Enums遷移進去。

Wheel.Domain

新建一個類庫Wheel.Domain,將我們的原本Domain中的所有目錄遷移進去,然後把IBasicRepository,IDbTransaction,IUnitOfWork接口遷移進去。

Wheel.Data

新建一個類庫Wheel.Data,依賴Wheel.Domain項目,將DbContext,EFBasicRepository實現以及工作單元的實現DbTransaction和UnitOfWork遷移進去。

整理項目依賴關係

代碼拆分好了之後就開始整理項目間的依賴關係了。
Wheel.Core是0依賴,裏面放的是框架的基礎設施。
Wheel.Shared是0依賴,所有用到裏面的靜態類和枚舉的項目才需要引用它。
Wheel.Domain依賴Wheel.Shared和Wheel.Core。
Wheel.Data依賴Wheel.Domain。
Host直接或間接依賴上面幾個類庫。
最終結構如下圖:
image.png
跟我們一開始單層應用對比,Host的內容少了一部分,但還是稍顯臃腫,我們的業務功能的實現還是堆積再Host中,所以我們還需要再做進一步的優化和拆分。
那麼下一篇我們再來做進一步的工作。

歡迎進羣催更。

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章