日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
淺析ASP.NET中Route組件的設(shè)計(jì)思考與模式

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

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括沈北新網(wǎng)站建設(shè)、沈北新網(wǎng)站制作、沈北新網(wǎng)頁(yè)制作以及沈北新網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,沈北新網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到沈北新省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

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

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

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

PreGetRouteData

PostGetRouteData

PreGetVirtualPath

PostGetVirtualPath

從它們的名稱上您也一定可以看得出它們是做什么的。從理論上來(lái)說(shuō),無(wú)論是DomainRoute還是FormatRoute,只要是為現(xiàn)有方法補(bǔ)充前/后置邏輯的擴(kuò)展,都可以通過(guò)提供IRouteInterceptor來(lái)實(shí)現(xiàn)。不過(guò)我除了DomainRoute以外,還真沒(méi)發(fā)現(xiàn)其他的使用環(huán)境。這個(gè)InterceptRoute似乎也是娛樂(lè)價(jià)值大于實(shí)際價(jià)值。因此就在這里一提,等以后忽然發(fā)現(xiàn)真有用了我們?cè)倌贸鰜?lái)遛遛。

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

假設(shè)我們已經(jīng)有了這樣一個(gè)CompositeRoute對(duì)象收集了一堆Route規(guī)則,那么什么時(shí)候會(huì)需要這樣的場(chǎng)景呢?其實(shí)DomainRoute就可以是這樣的,因?yàn)椤耙粋€(gè)域名下有多個(gè)Route規(guī)則”簡(jiǎn)直是天經(jīng)地義的事情。但其實(shí)事情并沒(méi)有那么簡(jiǎn)單,個(gè)中原因便是我們昨天所談?wù)摰摹懊麊?wèn)題”。

由于在配置Route規(guī)則的時(shí)候,我們要為每個(gè)Route提供一個(gè)名稱——但是這個(gè)名稱只是對(duì)RouteCollection才有效果,確切地說(shuō),只有RouteTable.Routes這個(gè)RouteCollection實(shí)例才會(huì)用到這一點(diǎn)。如此的話,使用CompositeRoute勢(shì)必將原本能夠有名稱的多個(gè)Route規(guī)則捆綁在了一起,我們?cè)谏蒛RL的時(shí)候就無(wú)法通過(guò)名稱定位到特定的Route上了。

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


網(wǎng)頁(yè)標(biāo)題:淺析ASP.NET中Route組件的設(shè)計(jì)思考與模式
URL網(wǎng)址:http://www.dlmjj.cn/article/cdpsjig.html