開箱即用~基於.NET Core的統一應用邏輯分層框架設計

目前公司系統多個應用分層結構各不相同,給運維和未來的開發帶來了巨大的成本,分層架構看似很簡單,但保證整個研發中心都使用統一的分層架構就不容易了。

那麼如何保證整個研發中心都使用統一的分層架構,以達到提高編寫代碼效率、保證工程統一性的目的?

這裡給出個人的規劃設計,希望對你有所啟發。

1.分層目標

  • 簡單易用:少即是多,哪怕應屆生進來也能很快上手
  • 結構統一:不管是新系統還是舊系統結構的是一樣的。
  • 提高效率:提高開發和運維效率,減少維護和學習成本

2.分層架構介紹

  先簡單介紹當前兩種比較流行的分層架構體系:領域分層架構和傳統三層架構

2.1領域分層架構

  領域架構:包括倉儲層、領域層、應用服務層、表現層和基礎公共層,如下圖所示:

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

2.2傳統三層架構

  另一種是相對傳統地分為三層:包括數據層、業務邏輯層和表現層,如下圖所示:

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

2.3二者區別?

  在早期做三層架構的時候,大都以表來驅動,在做領域架構的時候,大都以業務邏輯來驅動,兩者的區別確實比較明顯,但到了現在,如果都以業務邏輯為中心,那麼兩者並沒有本質區別。

  攜程公司採用了第二種分層法,他們希望把分層做得極簡,也就是說,哪怕剛畢業進入公司的員工,在分層時基本上也不會亂。

  相對於第一種分層法,第二種分層法簡單得多。每一個應用的代碼量都不應該很大,一旦工程變得過大,就會把它適當拆分,而不是全部放在一單體應用裡。

  總之,分層越簡單,整個軟件結構就越清晰,代碼就越容易統一

  把工程做得極簡,才有利於複製,有利於業務的快速構建,有利於規模化,使系統穩定可靠。

3.統一分層規範

  以上兩種邏輯分層如何做選型?我們要回到分層的目的上來評估,我們的目標是簡單、統一、高效。所以傳統的三層架構很好的滿足了我們的需求。而領域驅動開發,對DDD有一定的學習成本,同時對舊系統的歷史包袱,比如數據庫,我們無法做到面向領域編程,我們更多的要面向數據庫編程。所以,當前敏捷框架比較適合想從老系統遷移的,但是有數據庫歷史包袱的團隊。

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

3.1減少私人定製:

  減少私人通用幫助類CommonLayer的編寫,如果每一個應用中有大量相同的幫助類,則在架構層面上是有問題的。線上應用越多,則代碼重複越多。比如,每個應用都有分頁幫助類、數據庫幫助類、緩存幫助類、MQ幫助類、日誌幫助類、AOP幫助類等。

每一個應用都是特別的,都需要私人定製極少有通用的代碼,如果有,那麼

應該由框架或組件專門解決。這裡框架統一放在Com.Util裡。

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

3.2內聚大於解耦:

  內聚是指部門內有共同的目標,然後大家緊密合作。解耦是指部門間各自職責明確,然後減少不必要的連接。一個應用如同一個部門,應該有一個共同的目標和職責,然後大家緊密合作。

  換句話說,應用內部應減少不必要的契約接口,減少不必要的依賴注入實現,減少不必要且代價過大的解耦。一切以簡單實用為主,應用的價值輸出為導向。

  總之,無論採取何種分層架構,分層架構最核心的一點就是要保證各層之間職責足夠清晰,邊界足夠明顯,讓人看到架構圖後就能看懂整個架構。

4.分層規範實踐

4.0命名規範遵循:

  • 簡單
  • 可讀
  • 優雅

4.1表現層規範

(1)項目命名規則:

  • 如果是API服務,則命名規則為:{公司}.{業務名}.API

  比如:Com.Channel.API

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

  • 如果是MVC站點,則命名規則為:{公司}.{業務名}.MVCSite

  比如:Com.Channel.MVCSite

4.2邏輯層規範

(1)項目命名規則:{

公司}.{業務名}.Business

比如:Com.Channel.Business

(2)類名以Logic結尾

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

4.3數據層規範

(1)項目命名規則:{公司}.{

業務名}.{數據庫}DB

比如:Com.Channel.MSSQLDB

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

(2)約定在應用中使用SQL語句,不使用存儲過程。舊的存儲過程可以繼續使用和修改。

(3)使用數據庫的最新特性進行分頁

4.4實體層規範

  • DTO規範

(1)項目命名規則:{公司}.{業務名}.DTO

比如:Com.Channel.DTO

(2)請求參數DTO實體類放在Request文件夾下,且命名規則為以Request結尾,如下圖的 SearchColorRequest.cs

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

(3)響應DTO實體類放在Response文件夾下,且命名規則為以Response結尾,如下圖的 SearchColorResponse.cs

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

(4)如果請求或響應的DTO實體類的屬性中有對象或枚舉,那麼這些對象所屬的類、枚舉放在DTO項目的Common文件夾下。

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

(5)如果請求或響應的DTO實體類有基類要繼承,那麼約定為基類取名為RequestBase.cs、 ResponseBase.cs,且這些基類直接放在DTO項目的Common文件夾下。

  • VO規範

(1)項目命名規則:{公司}.{業務名}.ViewModel

比如:Com.Channel.ViewModel

(2)VO實體類約定用Controller作為文件夾名稱

(3)VO實體類名的命名約定:

  • 請求VO以Input/Form/Query結尾,如下圖的Colorlnput.cs
  • 響應VO以Output/List/Result結尾,如下圖的ColorOutput.cs

4.5公共層規範

(1)項目命名規則:{公司}.{業務名}.Util

比如:Com.Channel.Util

4.6測試層規範

(1)項目命名規則:{公司}.{業務名}.UnitTest

比如:Com.Channel.UnitTest

(2)單元測試類格式約定

  • 1.一個測試方法只測試一個問題
  • 2.使用Moq框架4.11.0
  • 3.使用FluentAPI https://fluentassertions.com/
  • 最後修改人:張飛洪
  • 最後修改時間:2019-6-20

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

(3)測試方法命名約定

測試方法名分成三段:主題+期望結果+參數  

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

4.6參數校驗層規範

  我們知道參數校驗對整個系統的安全性和性能來說是很重要的一個環節。

  • 那麼我們的參數校驗應該怎麼做才能讓自己滿意呢?
  • 也就是說怎樣才能讓到處都存在的參數校驗變得優雅呢?

  因為參數校驗屬於非業務性代碼,所以我的想法是使用AOP把他切割出來,不能讓校驗代碼和業務邏輯耦合,而且散落在各處,為此我把校驗類獨立出來,如下圖所示:

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

  在Controller層的做法也很簡單,就是綁定一下即可,如下圖所示:

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

5.其他規範

5.1DB配置規範

(1)配置文件分開發環境和生產環境

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

(2)數據庫連接的配置讀寫分離,鏈接字符串加密處理

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

(3)數據庫連接配置名的命名規則:{業務}_DB_CONN_讀寫類型(如上圖所示)

5.2配置文件規範

(1)統一使用json文件的配置方式

(2)json文件的讀取

  • 映射對象
  • 統一走AppSetting封裝類,通過冒號(:)進行讀取
  • 數據庫做讀寫分離

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

5.3靜態資源文件規範

(1)公共的靜態資源文件(CSS、JS、Image等)放在另外的靜態站點中,統一由前端進行開發和維護。一般CSS文件放在css文件夾下,JS文件放在js文件夾下, Image圖片文件放在img文件夾下,如下圖的左半部分所示。(截圖說明,如下圖所示:)

(2)靜態資源文件必須使用版本號管理,以免更新後由於客戶端瀏覽器緩存而導致站點使用的依然是舊版本的靜態資源文件:

(3)採用前後端完全分離的方式,讓Java或NET開發資源撤出表現層,以專注於業務邏輯需求的迭代。

源碼下載:

下載

  本篇博客經過數日熬夜,反覆刪減代碼,一步步搭建完成後整理的個人心得,分享給大家~~~,

  • 所需的源代碼,上傳在我的騰訊工蜂Git中,打賞博主一杯咖啡錢,然後私密博主~
  • 如果您不想付出,那麼請您加入Q群(996767213),並上傳您的資源,比如電子書或者其他資料,對群友有幫助的即可。

  下載需要簡單註冊工蜂,並把工蜂的用戶名給我(如下圖所示)

  

開箱即用~基於.NET Core的統一應用邏輯分層框架設計

運行

  您下載後,所要做的工作就是運行,然後就看到Swagger了(如下圖所示)

 

開箱即用~基於.NET Core的統一應用邏輯分層框架設計


分享到:


相關文章: