成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析ASP.NET中Route組件的設(shè)計思考與模式

開發(fā) 后端
在這里我們將談到的是ASP.NET中Route組件的設(shè)計思考與模式,希望本文對大家有所幫助。

在這里我們將介紹Route組件,對于這個組件相關(guān)文章不多。經(jīng)過老趙的這一番介紹,希望這些知識能對大家了解Route組件有所幫助。

Route組件雖然可以說是ASP.NET的“門戶”,不過至今為止似乎都被微軟當(dāng)作是二等公民。可能是由于自帶的Route類功能已經(jīng)太強,微軟官方或社區(qū)內(nèi)都不太關(guān)注RouteBase的擴展。不過有一點是正確的,那就是在大部分情況下的確沒有必要去擴展RouteBase。事實上,我構(gòu)建過不少RouteBase類,不過除了DomainRoute之外,其余的都被我放棄了,例如在大半年前寫的《請別埋沒了URL Routing》中所提供的FormatRoute,在MvcPatch中也已經(jīng)有了更好的替代品(過幾天便會談到這一點)。

RouteBase職責(zé)明確:從請求中獲取數(shù)據(jù),及根據(jù)數(shù)據(jù)生成虛擬路徑。它只有兩個方法:GetRouteData和GetVirtualPath,擴展起來非常容易,各種“模式”均可以體現(xiàn)出來。例如DomainRoute和FormatRoute都是使用了裝飾器模式,在內(nèi)部RouteBase的GetRouteData或GetVirtualPath方法的“前后”再加上一些邏輯(例如DomainRoute中的域名匹配或生成)。有趣的是,在幾個月前我還寫過一個InterceptRoute類:

  1. public class InterceptRoute : RouteBase  
  2. {  
  3.     public InterceptRoute(RouteBase innerRoute, IList interceptors)  
  4.     {  
  5.         this.InnerRoute = innerRoute;  
  6.         this.Interceptors = new InterceptorCollection(interceptors);  
  7.     }  
  8.  
  9.     public RouteBase InnerRoute { getprivate set; }  
  10.  
  11.     public InterceptorCollection Interceptors { getprivate set; }  
  12.     ...  

在很多時候,能夠像一個組件中插入“橫切”的邏輯總是很有用的(例如昨天剛提的NHibernate Interceptor),而上面這個便是在Route規(guī)則的各方法前后插入各種邏輯。提供這個邏輯的便是IRouteInterceptor對象,它有四個方法:

PreGetRouteData

PostGetRouteData

PreGetVirtualPath

PostGetVirtualPath

從它們的名稱上您也一定可以看得出它們是做什么的。從理論上來說,無論是DomainRoute還是FormatRoute,只要是為現(xiàn)有方法補充前/后置邏輯的擴展,都可以通過提供IRouteInterceptor來實現(xiàn)。不過我除了DomainRoute以外,還真沒發(fā)現(xiàn)其他的使用環(huán)境。這個InterceptRoute似乎也是娛樂價值大于實際價值。因此就在這里一提,等以后忽然發(fā)現(xiàn)真有用了我們再拿出來遛遛。

除了裝飾器模式/InterceptRoute之外,我還曾經(jīng)想過構(gòu)建另一種“結(jié)構(gòu)性”(如InterceptRoute一樣,本身不提供實際用途)的Route擴展,那就是利用了組合模式的Route規(guī)則。利用組合模式,我們可以將多個RouteBase對象聚合起來,并且在GetRouteData或GetVirtualPath的時候?qū)⒙氊?zé)委派給這些對象。事實上,它的職責(zé)就好似Routing框架本身所帶的RouteCollection一樣——當(dāng)然,之前我們也談過,RouteCollection的邏輯并不那么單純。

假設(shè)我們已經(jīng)有了這樣一個CompositeRoute對象收集了一堆Route規(guī)則,那么什么時候會需要這樣的場景呢?其實DomainRoute就可以是這樣的,因為“一個域名下有多個Route規(guī)則”簡直是天經(jīng)地義的事情。但其實事情并沒有那么簡單,個中原因便是我們昨天所談?wù)摰?ldquo;命名問題”。

由于在配置Route規(guī)則的時候,我們要為每個Route提供一個名稱——但是這個名稱只是對RouteCollection才有效果,確切地說,只有RouteTable.Routes這個RouteCollection實例才會用到這一點。如此的話,使用CompositeRoute勢必將原本能夠有名稱的多個Route規(guī)則捆綁在了一起,我們在生成URL的時候就無法通過名稱定位到特定的Route上了。

由于RouteCollection中釋放接口有限(也不是開源的,這意味著我們無法改造它),這一點幾乎無法通過自定義邏輯的方式來改進。因此在我看來,CompositeRoute幾乎無法用在任何場景上——DomainRoute當(dāng)然也不會使用這種設(shè)計方式了。

原文標(biāo)題:淺談Route組件的設(shè)計思考與模式

鏈接:http://www.cnblogs.com/JeffreyZhao/archive/2009/10/14/aspnet-routing-design-ideas-and-patterns.html

【編輯推薦】

  1. ASP.NET MVC單元測試:HttpContext類的Path屬性解惑
  2. 自定義的ControllerFactory:接口實現(xiàn),支持Area
  3. ASP.NET Routing之“解析URL”功能詳解
  4. 為ASP.NET MVC應(yīng)用添加自定義路由
  5. 學(xué)習(xí)ASP.NET MVC路由的使用方法

 

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-08-05 16:53:14

ASP.NET組件設(shè)計

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設(shè)計

2009-08-05 16:59:55

ASP.NET組件設(shè)計

2009-08-10 14:38:29

ASP.NET組件設(shè)計

2009-08-10 16:07:44

ASP.NET Lin

2009-08-10 15:42:33

ASP.NET Che

2009-07-24 14:03:02

IIS ASP.NET

2009-07-24 15:47:35

ASP.NET與ASP

2009-08-07 17:49:44

控件設(shè)計器

2009-08-10 10:19:47

ASP.NET組件設(shè)計

2009-07-28 14:10:14

2009-07-22 14:23:39

URL RewriteASP.NET

2009-12-02 09:07:45

ASP.NET 4.0

2009-07-27 15:34:11

MembershipASP.NET

2009-07-27 10:18:12

TypeResolveASP.NET

2009-08-05 18:36:12

ASP.NET Che

2009-07-24 13:41:15

ASP.NET AJA

2009-07-31 12:43:59

ASP.NET MVC

2009-08-05 15:50:13

ASP.NET優(yōu)點

2009-08-07 16:32:52

ASP.NET控件設(shè)計時支
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久免费看 | 九九综合 | 精品成人av | 欧美在线a | 亚洲 欧美 另类 综合 偷拍 | 久久久久欧美 | 欧美视频精品 | 天堂色区 | 一区二区三区欧美 | 成人久久18免费网站麻豆 | 国产日韩精品一区 | 精品一区国产 | 欧美一级高清片 | 欧美日韩精品一区 | 久久成人18免费网站 | 人和拘一级毛片c | 最新中文字幕在线 | 午夜视频免费网站 | 国产伦精品一区二区三区在线 | 精国产品一区二区三区四季综 | 欧美在线观看一区 | 欧美在线观看一区 | 999精品视频 | 婷婷午夜天| 一级特黄a大片 | 国产一级片免费在线观看 | 久热久热 | 国产精品欧美一区二区三区不卡 | 久久久久国产一区二区三区 | 91av视频在线观看 | 久久久一| 国产丝袜一区二区三区免费视频 | 色姑娘av| 久久av一区二区三区 | 国产成人精品一区二区三区视频 | 日韩视频中文字幕 | 国产精品欧美一区二区 | 亚洲精品日韩在线 | 做a视频| 日韩欧美一二三区 | 欧美日韩亚洲二区 |