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

ASP.NET Routing介紹

開發(fā) 后端
這里介紹ASP.NET Routing中最令人摸不著頭腦的設計-RouteBase類,下面你將看到微軟是怎么搞笑的。

您覺得ASP.NET Routing中最令人摸不著頭腦的設計是什么?我認為是RouteBase類:

  1. public abstract class RouteBase  
  2. {  
  3. protected RouteBase() { }  
  4. public abstract RouteData GetRouteData(HttpContextBase httpContext);  
  5. public abstract VirtualPathData GetVirtualPath(  
  6. RequestContext requestContext,  
  7. RouteValueDictionary values);  
  8. }  

它為什么是一個沒有任何實現的抽象類,而不是一個接口(如下)?

  1. public interface IRoute  
  2. {  
  3. RouteData GetRouteData(HttpContextBase httpContext);  
  4. VirtualPathData GetVirtualPath(  
  5. RequestContext requestContext,  
  6. RouteValueDictionary values);  
  7. }  

這樣做難道不更漂亮一些嗎?這樣代碼中都可以使用IRoute類型,避免RouteBase這種令人反感的命名出現(個人感覺,不知道有沒有同意的群眾)。退一步說,命名上的“美感”是小事……但是抽象類在.NET平臺中就產生了一個非常嚴重的限制:一個類無法繼承多個基類。因此,在.NET平臺上總是更傾向于使用接口,而不是抽象類。

但是接口里不可以有任何實現,那么可復用的功能又放在哪里比較合適呢?《Framework Design Guildlines》告訴我們:在一個類庫中,***為接口定義一個默認實現,這樣也是開發(fā)人員進行“擴展”的一個“參考”。也就是說,如果真有什么需要復用的實現,我們完全可以這么做:

  1. public abstract class RouteBase : IRoute  
  2. {   
  3. // reusable implementations  
  4. }  
  5.  
  6. public class Route : RouteBase  
  7. {  
  8. // concrete implementations  
  9. }  

事實上,.NET平臺上有許多類庫也遵循了這個做法。一個典型的做法便是ASP.NET AJAX框架的Extender模型:

  1. public interface IExtenderControl {   
  2. }  
  3.  
  4. public abstract class ExtenderControl : Control, IExtenderControl {   
  5. }  

甚至在ASP.NET AJAX Control Tookit項目中,還有更進一步的擴展:

  1. public abstract class ExtenderControlBase : ExtenderControl {   
  2. }  
  3.  
  4. public class AnimationExtenderControlBase : ExtenderControlBase {   
  5. }  
  6.  
  7. public class AutoCompleteExtender : AnimationExtenderControlBase {   
  8. }  

看來微軟在項目團隊內部推廣《Framework Design Guidelines》還不夠徹底。

在.NET平臺下,一個沒有任何實現的,純粹的抽象類可謂有百害而無一利。我很懷疑寫這段代碼的人剛從C++切換到C#——但是ASP.NET Routing中其實也有接口(如IRouteConstraint),為什么作者自己沒有意識到,也沒有人提出不同意見呢?微軟開發(fā)團隊應該有著嚴格的Code Review過程,怎么會讓這樣的代碼正式發(fā)布?要知道一個接口一旦公開,就不可以刪除了。也就是說,微軟很難彌補這個錯誤。

如果是方法名不好,或者職責有些不明確,這樣還可以在舊方法上添加ObsoleteAttribute(這樣編譯器便會提示用戶這個方法已經過期),并且將舊方法的調用委托給新的實現。例如:

  1. public abstract class CodeDomProvider : Component  
  2. {  
  3. [Obsolete(  
  4. "Callers should not use the ICodeCompiler interface and should  
  5. instead use the methods directly on the CodeDomProvider class.  
  6. Those inheriting from CodeDomProvider must still implement this  
  7. interface, and should exclude this warning or also obsolete this  
  8. method.")]  
  9. public abstract ICodeCompiler CreateCompiler();  
  10.  
  11. [Obsolete(  
  12. "Callers should not use the ICodeParser interface and should  
  13. instead use the methods directly on the CodeDomProvider class.  
  14. Those inheriting from CodeDomProvider must still implement this  
  15. interface, and should exclude this warning or also obsolete this  
  16. method.")]  
  17. public virtual ICodeParser CreateParser();  
  18.  
  19. ...  

可是,現在的問題是一個“類”,而這個類已經無處不在了,例如在RouteData中有一個屬性Route,它便是RouteBase類型——如果將其修改為IRoute接口,那么至少也需要項目重新編譯之后才能夠“升級”。而作為一個公開類庫,尤其是.NET這種成熟框架來說,應該做到“無痛”才對。

這次微軟真搞笑了。以上介紹ASP.NET Routing。

原文出處博客園,作者趙劼

【編輯推薦】

  1. ASP.NET控件學習總結
  2. 有關ASP.NET MVC框架的一些基礎知識
  3. 再談ASP.NET緩存機制:開發(fā)效率與優(yōu)化的平衡
  4. 如何避免ASP.NET緩存占用系統(tǒng)資源
  5. 點評一下ASP.NET的WEB控件
責任編輯:佚名 來源: 博客園
相關推薦

2009-07-21 15:11:14

ASP.NET Rou

2009-07-23 14:17:41

2009-07-27 17:00:29

ASP.NET主機

2009-07-29 09:14:36

ASP.NET網站

2009-07-29 10:02:49

ASP.NET上傳

2009-09-10 14:02:08

LINQ ASP.NE

2009-07-21 10:40:36

ASP.NET Pro

2009-07-29 17:26:39

ASP.NET頁面

2009-07-20 16:12:21

ASP.NET Fra

2009-07-22 16:05:34

ASP.NET AJA

2009-07-29 17:23:17

ASP.NET表單

2009-03-12 10:42:38

RoutingIgnoreRouteASP.NET

2009-08-21 10:51:55

ASP.NET Rou解析URL

2014-08-26 09:22:40

ASP.NET MVCRouting

2009-08-03 17:35:07

ASP.NET WebASP.NET編程工具

2009-07-29 09:53:24

ASP.NET異常管理

2009-07-24 13:39:03

ASP.NET彈出窗口

2009-07-29 10:35:51

ASP.NET緩存

2009-08-05 10:36:08

開發(fā)ASP.NET

2009-08-05 15:57:03

ASP.NET控件ID
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品免费视频一区 | 久久久毛片 | 色婷婷综合久久久中字幕精品久久 | 91精品无人区卡一卡二卡三 | 99热在这里只有精品 | 一区二区三区在线播放视频 | 国产精品毛片无码 | 久久88| 国产伦精品一区二区三区高清 | 日韩视频在线一区 | 免费看一级毛片 | 操操日 | 中文字幕亚洲精品 | 久久免费视频1 | 国产精久久久久久久 | av色站| 在线啊v | 欧美在线观看一区二区 | 九九免费观看视频 | 一区二区三区国产好的精 | 成年免费大片黄在线观看岛国 | 久久专区 | 亚洲欧美综合 | 欧美1区2区 | 国产精久久久久久久妇剪断 | 在线日韩欧美 | 男女免费网站 | 亚洲一区二区网站 | 男女又爽又黄视频 | 九色porny自拍视频 | 伊人中文字幕 | 国产精品久久久久久中文字 | 99色在线视频 | 蜜桃视频在线观看免费视频网站www | 久久久精品亚洲 | 99爱免费 | 欧美电影在线观看网站 | 新91视频网 | 亚洲国产精品久久久久婷婷老年 | 福利网站导航 | 男女午夜激情视频 |