作者:sylla
一個(gè)項目隨著(zhù)業(yè)務(wù)模塊的不斷增加,系統會(huì )越來(lái)越龐大。如果參與開(kāi)發(fā)的人員越多,管理起來(lái)難度也很大。面對這樣的情況,首先想到的是模塊化插件式開(kāi)發(fā),根據業(yè)務(wù)模塊,拆分成各個(gè)獨立的插件,然后分配不同開(kāi)發(fā)人員開(kāi)發(fā),互相之間沒(méi)有依賴(lài)完全獨立。
這里介紹一種使用ASP.NET Core MVC 技術(shù)開(kāi)發(fā)Web后臺系統,使用插件式的方案。這個(gè)方案在項目中已經(jīng)使用效果覺(jué)得還不錯,這里把主要思想提取出來(lái),做個(gè)簡(jiǎn)單的demo分享下
這里使用的開(kāi)發(fā)工具是vs2019,ASP.NET Core 2.1。
創(chuàng )建一個(gè)ASP.NET Core MVC項目,項目結構如下圖1,完全是腳手架自動(dòng)創(chuàng )建好的標準項目
圖1
這里是一個(gè)簡(jiǎn)單的默認程序,在實(shí)際的項目中,特別是傳統信息管理web后臺系統,登錄,以及登錄之后的主框架,還有一些公共的模塊,可以在主項目里面做,不會(huì )隨業(yè)務(wù)而變動(dòng)的。然后各個(gè)具體業(yè)務(wù)模塊分成獨立的插件開(kāi)發(fā)。
這個(gè)主項目建立好之后,運行正常,如圖2
圖2
下面開(kāi)始做代碼部分添加,為了方便閱讀代碼以截圖提供,最后會(huì )附加完整的demo程序提供下載。
1、在Startup.cs類(lèi)里面增加如下代碼圖3,具體作用看注釋?zhuān)@里就不再贅述。
圖3
這里是把插件程序注冊到主程序里面,核心就是使用了ApplicationParts
2、Startup.cs類(lèi)里面還有一個(gè)地方要修改,增加一個(gè)Areas區域的路由映射,圖4
圖4
增加這個(gè)的具體原因等會(huì )看插件項目的說(shuō)明
3、還有為了演示能否訪(fǎng)問(wèn)到插件,這里增加兩個(gè)插件的超鏈接,具體到業(yè)務(wù)中,菜單肯定是數據庫動(dòng)態(tài)維護的。
修改Views/Shared/_Layout.cshtml代碼如下 圖5
圖5
插件項目也是一個(gè)標準的ASP.NET Core MVC 項目。我這里為了演示,創(chuàng )建了兩個(gè)獨立的插件項目。如下圖6,圖7

圖6

圖7
插件項目說(shuō)明,插件是根據業(yè)務(wù)模塊劃分的,還有為了防止注冊到主項目之后路由命名的沖突,插件項目就使用MVC自帶的區塊Areas功能來(lái)存放。這里就是前面主項目要增加Areas路由映射的原因。然后刪除腳手架默認創(chuàng )建的外層控制器和視圖文件,因為主項目也有這樣同名的控制器路由,這些不刪除,到時(shí)候注冊到主項目,會(huì )出現重復路由錯誤。
插件項目增加各自的Areas,新建控制器如圖8,新建對應試圖如圖9。這里就添加幾個(gè)模擬數據。

圖8

圖9
到這里,把插件項目發(fā)布出來(lái)的xxx.dll和xxx.Views.dll,放到主項目里面去就可以運行了。
但是作為插件開(kāi)發(fā)者,每次需要把文件發(fā)布放到主項目去才能運行,對開(kāi)發(fā)調試都是不方便,因為插件開(kāi)發(fā)者可能就沒(méi)有主項目的權限,主項目是統一管理的。分配一個(gè)插件還每次都附帶一個(gè)主項目也比較繁瑣。
想到這里就可以反過(guò)來(lái)把主程序dll注冊到插件項目里面,這樣就可以在插件項目里面vs直接運行調試起來(lái)。
以插件1為例,Startup.cs類(lèi)里面增加如下代碼,圖10

圖10
這樣把主程序的dll提供,比如這個(gè)演示demo主程序就需要這兩個(gè)(Agile.WebPlatform.Main.dll與Agile.WebPlatform.Main.Views.dll)把他們放到插件項目的運行目錄。vs直接運行插件項目,就可以正常啟動(dòng)了。各種開(kāi)發(fā)調試完全不受其他影響。
插件里面直接啟動(dòng)調試圖11

圖11
運行效果如下 圖12

圖12
點(diǎn)擊插件1 顯示如下圖13

圖13
注意!這里雖然可以看到插件2,但點(diǎn)擊插件2是會(huì )提示找不到路由的,只能調試各自插件的內容。
開(kāi)發(fā)調試其他插件類(lèi)似,提供主項目的dll,各個(gè)插件項目完全可以獨立開(kāi)發(fā)自己的業(yè)務(wù)模塊,然后運行調試。
最后,只要把插件項目的發(fā)布文件放到主項目的發(fā)布文件里面,使用主項目來(lái)運行,整個(gè)系統所有的插件都能正常使用了。這樣就做到了開(kāi)發(fā)調試獨立,最后交付插件自己的dll,放到主項目的發(fā)布里面就可以了。
如下圖14,是最后發(fā)布的程序

圖14
使用命令運行主項目,或者宿主到iis也一樣,如圖15,命令行運行

圖15
瀏覽器打開(kāi)訪(fǎng)問(wèn),如圖16

圖16
點(diǎn)擊插件1,顯示如圖17

圖17
點(diǎn)擊插件2,顯示如圖18

圖18
希望你看了之后有點(diǎn)收獲,代碼程序下面附件提供
demo程序
●編號337,輸入編號直達本文
●輸入m獲取文章目錄
聯(lián)系客服