個人權限系統設計實現MVC4 + WebAPI + EasyUI + Knockout(五)框架及Web項目的組件化

1、組件化印象

一、先給你們看一張截圖css

image

若是我告訴你們,這就是一個web管理系統發佈後的全部內容,大家會不會以爲太簡潔了,只有一個web.config、一個Global.asax文件,其它的都是dll文件,沒有aspx、cshtml、html頁面,沒有js css images文件,但它的確能跑起來,跑起來以後的截圖以下html

image

二、再看我新建一個項目的流程web

新建一個ASP.NET MVC 4的空的項目數據庫

image

image

點肯定以後,建立項目,默認的項目目錄結構以下api

image

而後打開nuget包管理界面,選擇咱們須要安裝的組件 Zephyr.Web.Sys,這是咱們權限管理系統服務器

image

點安裝進行安裝,實現上就是引入dll文件mvc

image

安裝完成後,直接F5運行,就出現瞭如下頁面框架

image

點建立後ide

image

咱們選擇MySql輸入相應的數據庫信息測試鏈接經過後,點建立工具

image

建立成功

image

如今登陸跳轉到登錄頁面

image

登陸成功後

image

權限系統中頁面測試都沒有問題

image

而後咱們回過頭看程序,什麼都沒改變,

image

只是增長了一些引用及web.config中添加了一些信息。

image

那回過頭來,這樣發佈後,不就是咱們以前所看到了什麼都沒有的Web應用程序了

image

你們是否是也是很感興趣,我當時也只是一個想法,但直正驅動我去完成這些功能的仍是如下幾點:

a 代碼的重用性提升,能夠很方便的用NuGet管理類庫或系統。即便不用NuGet管理,直接把dll文件拷貝到新建項目的bin下面,而後修改下web.config也是能夠的。比之前咱們引用項目的方式方便不少。

b 建立一個新項目時只須要安裝組件便可

c 發佈後的程序乾淨,項目更新只需覆蓋對應的dll便可。

d 更方便作成產品發佈

 

2、NuGet操做

那麼咱們要作到前面所看到的,咱們要作哪些工做?

一、準備好要組件化的的類庫

image

二、建立Nuget包

建立NuGet包有不少種方法,我採用的是編譯時自動生成NuGet包,

首先要啓用NuGet包還原功能(Eable NuGet Package Restore),而後VS會自動下載添加一個.nuget的文件夾

image

而後編輯項目工程文件,添加最後一行<BuildPackage>true</BuildPackage>

image

而後編譯後就會在bin目錄下發現一個後綴爲nupkg的文件,這就是咱們要的nuget包

image

固然你也能夠在程序包管理器控制檯輸入命令行進行打包
也能夠下載一個圖形化的打包器nuget package explorer

三、推送到NuGet服務上

你能夠在https://www.nuget.org/註冊上賬號,放在nuget官網上
也能夠本身搭建一個NuGet服務器:新建一個空項目,安裝NuGet.Server而後直接發佈就能夠了。具體教程網上也不少了。

上傳NuGet包只須要執行如下命令
nuget push Zephyr.Core.2.0.0.0.nupkg -s http://192.168.1.100:8888

到這裏就已經ok了,你能夠在Nuget包管理界面中添加一個程序包源服務地址,而後就能夠安裝你剛剛上傳的包了

 

3、打包Web應用會碰到的問題

一、資源的嵌入

資源的嵌入分兩種,一種是靜態資源,直接內嵌到程序集中
第二種是動態的頁面,能夠預編譯成類放到程序集中

image

 

二、資源的訪問

獲取嵌入資源的訪問地址

public static string GetResourceUrl(Type type string embedFileName)
{
var page = new Page(); return page.ClientScript.GetWebResourceUrl(type, embedFileName); }

固然你也能夠經過controller去處理

[AllowAnonymous]
[MvcMenuFilter(false)]
[WebFrameworkFilter]
public class ResourceController : Controller
{
    public ActionResult Index()
    {
        var assemblyName = ResourceVirtualPathProvider.ResourceVirtualPath.GetAssemblyName(Request.Path);
        var filename = ResourceVirtualPathProvider.ResourceVirtualPath.GetResourceName(Request.Path);
        var assembly = ReflectionHelper.GetAssembly(assemblyName);

        var stream = ResourceHelper.GetFileStream(assembly,filename);
        var contentType = ResourceHelper.GetContentType(filename);

        if (stream == null)
            return HttpNotFound();

        return File(stream, contentType);
    }
}

4、框架組件化操做

個人框架Zephyr.Net主要分爲:

類庫 描述 依賴
Zephyr.Utils 工具類庫  
Zephyr.Library 經常使用其它類庫  
Zephyr.Data 數據庫訪問組件  
Zephyr.Core 框架核心類 Zephyr.Utils Zephyr.Library Zephyr.Data
Zephyr.Web.Resource 靜態資源  
Zephyr.Web.Mvc 縱雲Mvc框架 Zephyr.Core
Zephyr.Web.Sys 權限管理系統 Zephyr.Web.Mvc

以上是七個獨立的項目,依賴關係也不直接引用項目,而是從nuget上引用發佈程序包,

其中前面四個是類庫
Zephyr.Web.Resource是嵌入靜態資源的程序集,若是不引入這個文件,直接把靜態資源文件夾拷貝進項目中也是能夠的。
Zephyr.Web.Mvc是咱們的Mvc框架基礎,已經包括了mvc及web api不少的路由註冊過濾器設定等設置,而且有Login頁面和Index頁面,安裝了這個組件,即便不安裝縱雲權限系統組件,程序也同樣能夠跑起來,只是沒有權限系統,是個空的架子。
Zephyr.Web.Sys就是權限系統了,把權限系統的mvc及webapi控制器、View頁面、js以及數據庫初始化處理都放在這個程序集中。
之後咱們開發新的項目也能夠作成跟這個權限系統同樣,都放在一個dll中(固然也能夠分多個,把controller model等都分紅不一樣的層),之後只要引入或者bin下面放入這個dll就會動態引入這個模塊,很是方便。

打包成nuget packages發佈到nuget服務上,大功就告成了,若是有更新,只須要更新版本號從新發布就好了

image

這樣一來,基本就把個人框架以及權限系統都作成組件了,若是新項目須要引入,或者多個項目升級都很方便了。

.NET框架交流羣(三)  21549700

相關文章
相關標籤/搜索