日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

谈谈.NET MVC QMVC高级开发

發布時間:2023/12/20 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谈谈.NET MVC QMVC高级开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??? 自從吾修主頁上發布了QMVC1.0,非常感興趣,用了半月的時間學習,真的感覺收益非淺,在此聲明非常感謝吾修大哥的分享!

??? 1、輕快簡單,框架就幾個類,簡單,當然代碼少也就運行快!單純的MVC,使的如果你想擴展框架,可以輕易的在QMVC上增加和減少功能,也就是說更容易的去修改和讀懂源碼。

??? 2、可以與webform框架融合,也就是說你用webform和mvc共同在同一個項目中運行。

??? 3、QMVC APP開發,QMVC APP可以輕易實現多個QMVC項目合并到一個項目中運行,也可以輕易將其分離開獨立運行,比如一個網站常有論壇、文章系統、新聞系統等,如果你的程序用qmvc app,哪么可以輕易實現多個系統的融合。

??? 本文主題:“QMVC高級開發”,所謂高級我可不認為就是學不會,搞不懂的忽悠者是高級!而是高與初級的層面上知識,所以在此,我假設你己經懂了QMVC的基礎級應用,如果想了解QMVC的初級應用,可以參考我寫的一篇文章《高性能.NET MVC之QMVC》,或QMVC官網(www.wuxiu.org)。

??? 怎樣的框架是最適合你的?哪么豪無疑問,最適合你的框架,什么是最適合自己的?肯定是量身定制的!就像是如果說qmvc,他的代碼非常少,層次簡單,邏輯清晰,簡單。你可以通過基于QMVC輕易擴展成適合自己系統的框架!本文就談談如何擴展自己的MVC APP框架、談談QMVC源碼結構!

??? 1、QMVC源碼分析

??? 首先QMVC源碼中存在兩種MVC模式,一種是QMVC基本框架,一種是QMVC APP框架,QMVC APP的代碼是基于QMVC基本框架實現的,源碼中APPS目錄中存的是關于QMVC APP框架的實現代碼。根目錄下是QMVC基本框架,Router為QMVC的路由功能,用HTTP請求地址的分析。

??? ControllerBase類??? 所有控制器的基類

??? IMVCModel??模型調用接口,當然你的Model也可以不繼承于此接口,如果想在Model中調用QMVCRazorPage類,哪么可以實現接口中獲取。

??? MVCRazorPageBase類? 是關于View模板的基類

???? QMVCCore類????????? QMVC框架的核心類,控制qmvc運行的支持者。

??? ViewResult類??????? 是Controller傳值給QMVCCore去調用Razor模板時的信息類,Controller把要顯示的信息給ViewResult,QMVCCore通過ViewResult加載Razor模板。

??? Router.IRouterProvider接口?? 如果你想重寫QMVC的路由功能,哪么可以實現Router.IRouterProvider接口實現。

??? 至于APPS中的類于以上的類類似,并且實現了固定的Router。

??? 如果你想重寫模板顯示路徑規則可以重寫ControllerBase類中的getTemplateUrl方法,這無疑對你編寫自己的框架起到了最大控制的空間,原方法代碼:

protected virtual string getTemplateUrl(string themeName,string controllerName,string viewName) {return "~/" + themeName + "Views/" + controllerName + "/" + viewName + ".cshtml"; }

DefaultRouter類

using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Web;namespace wuxiu.QMVC.Router {public class DefaultRouter : IRouterProvider{string DefaultController;string DefaultAction;RouterControllerCollection controllers = new RouterControllerCollection();public DefaultRouter(Assembly asm, string defaultController, string defaultAction){DefaultController = defaultController;DefaultAction = defaultAction;// controllers.LoadAssembly(asm);}public ControllerBase LoadUrl(HttpContextBase context, string apprawurl){string controllerName = DefaultController;string action = DefaultAction;string pageurl;if (apprawurl.IndexOf('?') != -1){pageurl = apprawurl.Substring(0, apprawurl.IndexOf('?'));}else pageurl = apprawurl;string[] urls= Utils.ClearStrArrayEmpty(pageurl.Split('/'));string[] urldata;if(urls.Length>0){controllerName=urls[0];}else controllerName=DefaultController;if(urls.Length>1){action=urls[1];if (!action.EndsWith(".action",StringComparison.OrdinalIgnoreCase)){return null;} action = action.Substring(0,action.Length - ".action".Length);}else action=DefaultAction;if(urls.Length>2){urldata=new string[urls.Length-2];for(int i=2;i<urls.Length;i++)urldata[i-2]=urls[i];}else urldata=new string[]{};Type ControllerType = controllers.GetController(controllerName);if (ControllerType != null){ControllerBase controller = Activator.CreateInstance(ControllerType) as ControllerBase;controller.init(context, controllerName, action, urldata);return controller;}return null;}} }

QMVC默認路由器類,沒有實現正則表達式,其實我覺得這是一個好事,因為使用字符分析更準確性能更佳。DefaultRouter類中實現了IRouterProvider接口,在LoadUrl函數中分析了http請求地址,并且通過反射的方式調用的控制器中的方法。

?? 2、QMVC APP介紹

  QMVC APP的實現目的是為了實現多個項目融合提出的解決方案,當然如果你的程序按照QMVC APP模式開發,可以很容易的實現與另一個APP之間融合到一個站點中運行。   如果你的項目按照QMVC APP模式開發,哪么Controller是繼承自wuxiu.QMVC.APPS.APPController基類,每一個應用中必須實現APPProvider類。每個應用中存放app.config文件。

??? QMVC APP目錄結構

??? APPS

  ?? APPName

  ????? DefaultViews

  ???????? ControllerName

  ??????????? ActionName.cshtml

  ???????? ...

  ????? App.config

  Controllers

  Models

  APPProvider.cs

  Global.asax

  Web.config

  以上樹中,APPS目錄是必須目錄,用于包含當前項目中所有的應用文件夾,APPName是應用的文件夾,其中包括了Views和app.config,Views里存放了應用所用的視圖,app.config中定義了應用的配置信息。

  APPProvider.cs是APPS模式中所有應用實現的一個類,他繼承于wuxiu.QMVC.APPS.APPProvider類,該類在QMVC初始化時調用,用于初始化APP。   Models和Controllers文件為當前應用的相關控制器和模型存放目錄。

?? QMVC APP項目配置

  若建一個QMVC APP模式的項目,必須以6.2節中定義的目錄結構外,需要修改一些配置文件,讓ASP.NET運行框架支持QMVC APP運行。

  Web.config中,添加或修改以下配置項:

  

<configuration><system.web><compilation debug="true" targetFramework="4.5"><assemblies><add assembly="System.Web.WebPages.Razor2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=14679ed9c77dd5f5" /><add assembly="System.Web.WebPages2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=14679ed9c77dd5f5" /><add assembly="System.Web.Razor2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=14679ed9c77dd5f5" /></assemblies><buildProviders><remove extension=".cshtml"/><addextension=".cshtml"type="System.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor2"/></buildProviders></compilation></system.web><system.webServer><modules runAllManagedModulesForAllRequests="true"/></system.webServer></configuration>

  APPS/web.config中,添加或修改以下配置項:

<configuration><configSections><sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor2"><section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor2" requirePermission="false" /><section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor2" requirePermission="false" /></sectionGroup></configSections><system.web></system.web><system.web.webPages.razor><pages pageBaseType="wuxiu.QMVC.MVCRzorPageBase"><namespaces><add namespace="wuxiu.QMVC" /></namespaces></pages></system.web.webPages.razor> </configuration>

APPS/APPName/APPProvider.config

 

 <?xml version="1.0" encoding="utf-8" ?><app name="貼吧系統"version="1.0"copyright="bobby"urlFolder="wuxiu"appProviderClass="wuxiu.tiebaAPP.TiebaAPPProvider"assembly="bin:wuxiu.tiebaAPP"enable="true"><appSettings><add key="" value=""/>... </appSettings><customElements></customElements> </app>

  如果您創建一個QMVC APP,哪么必須寫一個app.config描述您的應用信息,QMVC會按照您的配置去加載應用,并且把您的配置信息傳給應用。

  APP節點屬性

Name?應用的名稱 Version???????????????? 當前應用的版本號 appProviderClass?表示實現wuxiu.QMVC.APPS.APPProvider類的命名空間和類名,用于初始化APP的類。 assembly???????? 當前應用的APPProvider所在的類庫,值有兩種書寫形式:

??????????????????????? 1、file冒號開頭,標識app/bin/目錄下的dll文件名,如:“file:mydll.dll”。

??????????????????????? 2、bin:默認為程序跟目錄Bin目錄下的程序集名稱,如:“bin:mydll”。

說明:推薦使用bin前綴,因為file雖然可以獨立自己的程序目錄,確存在著運行中獨占的問題,可能導致程序運行頁dll不允許移動和刪除。 Enable?標識當前程序是否可用,值有兩個:true或false。

以上章節是翻譯自吾修主頁的QMVC Doumentation章節中關于QMVC APP章節!?????

實現一個自己的AppController

public class HomeController:wuxiu.QMVC.APPS.APPController{public wuxiu.QMVC.ViewResult Index(){return View();} }

實現一個IMVCModel類

當在模型類中可以獲取到MVCRazorPage對象無疑將Model的功能增加,他可以更靈活的提供些程序邏輯,減少了Razor模板中的代碼,畢竟Razor是給美工操作的層面代碼。

public class MyModel:wuxiu.QMVC.IQMVCModel{public string LoginPageUrl { get { return page.APPUrlStart + "/user/login.action"; } }wuxiu.QMVC.APPS.APPRazorPage page;public void Init(QMVCRzorPageBase page){this.page = (wuxiu.QMVC.APPS.APPRazorPage)page;}}

?

轉載于:https://www.cnblogs.com/jsmblog/p/qmvc_app.html

總結

以上是生活随笔為你收集整理的谈谈.NET MVC QMVC高级开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。