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

ASP.NET Routing介紹

開發 后端
這里介紹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》告訴我們:在一個類庫中,***為接口定義一個默認實現,這樣也是開發人員進行“擴展”的一個“參考”。也就是說,如果真有什么需要復用的實現,我們完全可以這么做:

  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),為什么作者自己沒有意識到,也沒有人提出不同意見呢?微軟開發團隊應該有著嚴格的Code Review過程,怎么會讓這樣的代碼正式發布?要知道一個接口一旦公開,就不可以刪除了。也就是說,微軟很難彌補這個錯誤。

如果是方法名不好,或者職責有些不明確,這樣還可以在舊方法上添加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緩存機制:開發效率與優化的平衡
  4. 如何避免ASP.NET緩存占用系統資源
  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

開發ASP.NET

2009-08-05 15:57:03

ASP.NET控件ID
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲在线电影 | www.日韩| 久久亚洲视频网 | www.99久久.com| 中文字幕在线视频网站 | 国产欧美精品一区二区 | 一区二区三区四区不卡视频 | 欧美一级在线观看 | 日韩一区二区三区视频 | 中文字幕a√ | 国产日韩欧美激情 | 成人国产免费视频 | 蜜桃久久| 亚洲一区免费在线 | 91亚洲国产 | 国产日韩欧美激情 | 亚洲成人综合社区 | 九色在线视频 | 国产精品久久久久久久一区二区 | 国产精品一区二区三区在线 | 欧美精品一区在线发布 | 亚洲欧美一区二区三区在线 | 久久久成人一区二区免费影院 | 亚洲一区二区av | 久久久性 | 亚洲精品久久久久中文字幕二区 | 国产精品精品视频一区二区三区 | 欧美中文字幕一区 | 精品一区在线免费观看 | 国产高清精品一区二区三区 | 久久99精品久久久久久噜噜 | 欧美久久一级 | 午夜影院在线免费观看视频 | 天天干狠狠操 | 91精品国产一区 | 亚洲精品一区二三区不卡 | 91看片网 | 天堂av在线影院 | 成人在线不卡 | 久久精品久久久久久 | 国产精品国产三级国产a |