.NETCore 千星項目模塊化開發框架 SimplCommerce 詳解


SimplCommerce 是 github 上過千星的.netcore 商城示例項目,本文詳解他的模塊化框架現實思路,其業務(如產品、訂單)不作介紹。因作者文筆水平很差,它又很值得學習和推薦,就算不要臉獻丑一次吧,如對本文有不明白之處望見諒留言,謝謝。

 

早期單體開發框架,因為簡單上手快的特點廣受青睞。但是隨着項目時間的考驗,最終變得難以維護,臃腫、規范、污染等劣勢導致人力成本增加。文章后方有 ABP、微服務、模塊化、單體應用場景分析。

 

SimplCommerce 特點

 

分解

一個超級大的項目,主程可以按功能拆分成N個平行的小模塊,每位開發成員都清楚自己負責的模塊。

如上圖: Modules 目錄里的子項目都是分解后的模塊


獨立

新人是項目開發中最具破壞力的元凶之一,模塊間獨立、隔離可以有效的限制他們,避免核心模塊或整體污染。

每個模塊可以有自己的數據庫、配置(appsettings.json)、Controller、Views(razor模板)、wwwroot(靜態資源)


可擴展性

策划說要增加代理功能,新增一個模塊來開發,既不影響原有模塊,對開發人員等同是新的小項目,從而更簡單。

這個雪球可以一直滾下去,哪怕增加100個新模塊,給兵就能打勝仗。


可維護性

得益於分解、獨立特性,每個模塊代碼更少,交接成本、調試成本更低。

舉一個極端的例子,需求改不動了怎么辦,重構此模塊也不過如此吧,不必牽一發而動全身。


可組合性

模塊可單獨、或者組合部署。

比如獨立部署:Modules/SimplCommerce.Module.Orders 由於訪問量較大獨立到 A 服務器

比如組合部署:Modules/SimplCommerce.Module.Catalog、Modules/SimplCommerce.Module.Cms 由於沒有壓力獨立到 B 服務器

 

SimplCommerce 模塊化框架現實分析



如上圖,這是 Catalog 模塊的目錄結構,看上去和普通和 mvc 沒什么區別,仔細看他還少了點什么,對。。。沒有 Program.cs、Startup.cs

 

問:他怎么啟動運行呢?

答:模塊只負責現實功能,SimplCommerce.WebHost 才是啟動項目。

 

問:SimplCommerce.WebHost 啟動怎么加載 Catalog 里的 mvc 代碼?

答:請看 SimplCommerce.WebHost/SimplCommerce.WebHost.csproj

  <Target Name="CopyModules" AfterTargets="Build">
    <Exec WorkingDirectory="." Command="npm run gulp-copy-modules -- --configurationName $(ConfigurationName)" />
  </Target>

編譯成功后執行 npm run gulp-copy-modules(源碼在 SimplCommerce.WebHost/gulpfile.js),采用 node + gulp 將 Modules 所有模塊編譯結果與所需資源復制到 WebHost 目錄之下。

編譯成功后的偽動作大致如下:


復制 SimplCommerce.Module.Catalog/bin/Catalog.dll 到 SimplCommerce.WebHost/Modules/Catalog/Catalog.dll

復制 SimplCommerce.Module.Catalog/Views/* 到 SimplCommerce.WebHost/Modules/Catalog/Views/

復制 SimplCommerce.Module.Catalog/appsettings.json 到 SimplCommerce.WebHost/Modules/Catalog/appsettings.json

復制 SimplCommerce.Module.Catalog/wwwroot/* 到 SimplCommerce.WebHost/wwwroot/


dotnet 運行 SimplCommerce.WebHost 時做了以下現實:

1、反射加載 Modules/Catalog/Catalog.dll、Modules/Catalog/Views,由於現實代碼過多,本文不貼出(現實源碼在此:SimplCommerce.WebHost/Extensions/ServiceCollectionExtensions.cs)

2、合並 appsettings.json 配置文件,采取了類似以下的代碼

var confg = new ConfigurationBuilder()
  .SetBasePath(env.ContentRootPath)
  .AddJsonFile("appsettings.json", true, true)
  .AddJsonFile("Modules/Catalog/appsettings.json", true, true);

3、wwwroot 已自然合並。。

 

問:SimplCommerce.WebHost 需要經常維護嗎?

答:不需要,它實現了動態加載模塊,項目開發人員只需要負責較簡單的 Module。

 

問:如果模塊定義太多,如何全部編譯?

答:由於 vs 太方便,右擊 Modules 目錄就可以全部編譯了。

 


源碼地址:https://github.com/simplcommerce/SimplCommerce

特別介紹,由於作者太菜2016年轉型 .net core 項目時,它就已經過了千星,星多代表着生態,且用且珍惜。

 

各大開發框架應用場景分析


ABP

基於 DDD 開發的實踐項目,.NETCore 2.0發布以后,國內很多個人用它學習上手,也有公司開始使用它開發項目。

絕對是大團隊才傷得起的選擇,學習和使用成本較高,作者編程13年玩不轉它,您要說我菜,我認。

它的缺點很多我就不說了,因為ABP粉絲太多怕被噴死。。至少他不適合我。


微服務

不多作介紹,這個詞是個程序員都聽過了解過,有很多實踐項目如eShopOnContainers,有人說玩轉他就通了一切。

我是這樣理解微服務應用場景的:

1、只有當服務器壓力很大的情況下,才考慮拆拆分微服務。

2、只有需求變動較小、訪問量超大的情況下,才考慮微服務架構,比如電商。

它需要很強的架構師。

它不適合小團隊。

它不適合做需求泛濫的項目。

它不適合功能型太復雜的項目。


模塊化

本文介紹的即是模塊化開發框架,天生適合中大型項目開發,並且為以后拆分成微服務架構奠定了基礎。


單體

適合個人或小型項目,優點:快。

 

總結

每種技術框架存在即是合理的,各有優點和缺點,沒有哪個最好哪個最壞,在合適的場景選擇合適的框架,它就是把雙刃劍,反之將貽誤終生。

 

花了半天時間寫這篇文章,希望點贊的兄弟下個月能加工資500,謝謝觀看。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM