NET网页编程之浅析ASP.NET中Route组件的计划思索与形式
简单的说:.net只有微软一家在做的,微软也不允许别人跟他做相同的工具,所以他就把需要的工具全部封装在.net的平台上了;而java是公开了。<p>在这里我们将先容Route组件,关于这个组件相干文章未几。经由老赵的这一番先容,但愿这些常识能对人人懂得Route组件有所匡助。Route组件固然能够说是ASP.NET的“流派”,不外至今为止仿佛都被微软看成是二等国民。多是因为自带的Route类功效已太强,微软官方或社区内都不太存眷RouteBase的扩大。不外有一点是准确的,那就是在年夜部分情形下切实其实没有需要往扩大RouteBase。现实上,我构建过很多RouteBase类,不外除DomainRoute以外,其他的都被我保持了,比方在泰半年前写的《请别沉没了URLRouting》中所供应的FormatRoute,在MvcPatch中也已有了更好的替换品(过几天便漫谈到这一点)。
RouteBase职责明白:从哀求中猎取数据,及依据数据天生假造路径。它只要两个办法:GetRouteData和GetVirtualPath,扩大起来十分简单,各类“形式”都可以表现出来。比方DomainRoute和FormatRoute都是利用了粉饰器形式,在外部RouteBase的GetRouteData或GetVirtualPath办法的“前后”再加上一些逻辑(比方DomainRoute中的域名婚配或天生)。风趣的是,在几个月前我还写过一个InterceptRoute类:
<OLclass=dp-c>publicclassInterceptRoute:RouteBase{publicInterceptRoute(RouteBaseinnerRoute,IListinterceptors){this.InnerRoute=innerRoute;this.Interceptors=newInterceptorCollection(interceptors);}publicRouteBaseInnerRoute{get;privateset;}publicInterceptorCollectionInterceptors{get;privateset;}...}
在良多时分,可以像一个组件中拔出“横切”的逻辑老是很有效的(比方今天刚提的NHibernateInterceptor),而下面这个即是在Route划定规矩的各办法前后拔出各类逻辑。供应这个逻辑的即是IRouteInterceptor工具,它有四个办法:
PreGetRouteData
PostGetRouteData
PreGetVirtualPath
PostGetVirtualPath
从它们的称号上您也必定能够看得出它们是做甚么的。从实际下去说,不管是DomainRoute仍是FormatRoute,只需是为现无方法增补前/后置逻辑的扩大,都能够经由过程供应IRouteInterceptor来完成。不外我除DomainRoute之外,还真没发明其他的利用情况。这个InterceptRoute仿佛也是文娱代价年夜于实践代价。因而就在这里一提,等今后溘然发明真有效了我们再拿出来遛遛。
除粉饰器形式/InterceptRoute以外,我还已经想过构建另外一种“布局性”(如InterceptRoute一样,自己不供应实践用处)的Route扩大,那就是使用了组合形式的Route划定规矩。使用组合形式,我们能够将多个RouteBase工具聚合起来,而且在GetRouteData或GetVirtualPath的时分将职责委派给这些工具。现实上,它的职责就宛如彷佛Routing框架自己所带的RouteCollection一样——固然,之前我们也谈过,RouteCollection的逻辑其实不那末纯真。
假定我们已有了如许一个CompositeRoute工具搜集了一堆Route划定规矩,那末甚么时分会必要如许的场景呢?实在DomainRoute就能够是如许的,由于“一个域名下有多个Route划定规矩”几乎是不移至理的事变。但实在事变并没有那末复杂,其中缘故原由即是我们今天所议论的“定名成绩”。
因为在设置Route划定规矩的时分,我们要为每一个Route供应一个称号——可是这个称号只是对RouteCollection才无效果,切实地说,只要RouteTable.Routes这个RouteCollection实例才会用到这一点。云云的话,利用CompositeRoute必将将底本可以着名称的多个Route划定规矩绑缚在了一同,我们在天生URL的时分就没法经由过程称号定位到特定的Route上了。
因为RouteCollection中开释接口无限(也不是开源的,这意味着我们没法改革它),这一点几近没法经由过程自界说逻辑的体例来改善。因而在我看来,CompositeRoute几近没法用在任何场景上——DomainRoute固然也不会利用这类计划体例了。
原文题目:浅谈Route组件的计划思索与形式
链接:http://www.ckuyun.com/JeffreyZhao/archive/2009/10/14/aspnet-routing-design-ideas-and-patterns.html
<p>c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。 CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。 我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。 CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。 PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
页:
[1]