MonoRail - 簡介 [基礎知識篇]

MonoRail - 簡介

起源

MonoRail是一個.NET的MVC web開發框架, 原名Castle On Rails, 是CastleProject的一個子項目. 作者hammett在使用過Ruby On Rails后, 覺得非常棒, 他希望在享受ror的開發模式的同時能使用大量現有的資源, 于是就用.NET寫出了一個Castle On Rails. 后來ror那邊有人抗議說, 把項目名字叫做xxx On Rails是侵權, On Rails不只是它字面上"快捷"的意思, 而是代表了他們的軟件開發哲學, 是專有名詞... 于是hammett把項目改名成MonoRail了. 現在可下載的版本是0.4beta, svn上的版本已經是RC1了

簡介

MonoRail的核心是Action Pack在.NET上的實現. 這種方式高效, 直觀而且易于測試.

MonoRail的開發模式和傳統的webform有很大區別, webform屬于PageController模式, 每一個頁面對應一個Controller, 通常情況下, 這個Controller就是根據url相對應的.aspx文件分析出來產生的類. 如果不清楚aspx的底細, 請看這里. System.WebUI.Page實現了IHttpHandler, 每個aspx相關的類各自處理自己的http請求, 經一些邏輯處理后(通常代碼在aspx的Codebind類, 也就是aspx的父類), 輸出自己的視圖. 而MonoRail是FrontController模式, 由Castle.MonoRail.Framework.MonoRailHttpHandler接管所有請求,?然后根據請求的url創建相應的controller, controller再調用相應的action, 最后調用模板引擎輸出內容. 默認情況下, 一個url的結構是Controller/action. 例如, http://localhost/monorailSample/Home/index.rails對應類HomeController的Index()方法.

MonoRail實現的模板引擎有3個

AspNetViewEngine 用傳統的.aspx文件做模板, 可以照常使用aspx語法和服務器控件, 但是由于Webform的生命周期和MonoRail完全不同, 有時候會讓人覺得別扭, 有部分特性也受到了限制.

NVelocityViewEngine 用NVelocity做模板引擎, 需要學習VTL語法, 但是使用很簡單, 特別是很多java程序員已經熟悉velocity. 簡單的語法也強迫程序員把邏輯和界面很好的分離開來, 方便跟美工配合.

BrailViewEngine 基于Boo的模板引擎, Boo是一種語法類似python的.NET語言, 據MonoRail的參考說, Brail引擎是功能最強, 性能最好的選擇, 但Boo是一種陌生的語言, 這成了Brail引擎應用的最大障礙.

綜合各種因素, MonoRail推薦使用的模板引擎是NVelocity, 但說不定哪天Brail會趕上來...

沒有Server Control的世界

五花八門的Server Control是似乎是asp.net最吸引人, 最有優勢的地方. Webform確實是一個非常棒的設計. 復雜的HTML和js在服務端被包裝成簡單易用, 有清晰層次結構的對象, 比起asp時代界面的編寫方便多了. 當初想用monorail只是出于方便和美工配合的考慮, 并且擔心是否有些工作又回到asp時代的原始狀態. 但事實上, 我用monorail花了一個星期做了一個小項目后, 發現代碼是多么的簡潔和清爽, 代碼量比傳統的Webform開發少多了. 總結一下monorail效率如此之高的原因:

1. SmartDispatcherController提供了querystring或form到action參數的綁定, 支持string, 各種數值類型, 數組以及HttpPostedFile. 例如, EditUser.rails?id=1, 1將會綁定到EditUser(int id)方法的id參數.?參數還可以綁定到一個對象, 例如一個form里有name屬性和User類各個字段名對應的input, 當他們post到SaveUser.rails時, SaveUser([DataBind]User user)中的user將會自動被創建和賦值. 一個業務邏輯比較簡單的MIS, 或許相當一部分的代碼就是這樣無聊的:

paramName.Value = txtName.Text ;
paramBirthday.Value = txtBirthday.Text.Length >0? DateTime.Parse(txtBirthday.Text) : DBNull.Value ;
...

但是有了自動綁定機制后, 無聊的代碼就消失了,? 這也顯得TextBox, DropdownList之類的簡單server control沒有什么價值了.

2. 可以定義Filter, 在action之前和/或之后執行, 在Filter里可以獲得action相關的上下文, 如果是在action之前執行還可以通過返回false終止action的執行. Filter可以用于權限驗證, 日志, 生成公有的動態內容等方面, 提高了邏輯代碼的復用.

3. 模板可以嵌套, 或者在Controller里定義LayoutAttribute使模板被嵌套, 并且引入了概念有點類似user control的ViewComponent, 提高了界面的復用.

4. 邏輯和界面完全分離, 便于維護和測試.

大部分流行的asp.net控件, 都有開源的js實現的替代品, 例如HTML編輯器可以用FCKeditor, 日歷可以用JsCalendar, 還有TreeView, Menu之類的, 在sf.net都應該找得到比較好的項目. 至于datagrid, 用nvelocity的foreach循環足夠了. 其實webform只是入門容易,要精通的話它的成本是比精通xhtml + css + javascript的成本高得多的。我也用過兩年webform,但是我仍然不了解它的生命周期中大部分的步驟。。。。
應用案例

越來越多了:) castle官方論壇的monorail有專門板塊用來展示。

轉載自:http://www.cnblogs.com/yok/archive/2005/11/05/269383.html

轉載于:https://www.cnblogs.com/xyzla/articles/2728527.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260299.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260299.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260299.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

結對編程(黃金點游戲)

我扮演的角色是駕駛員 一、結對伙伴 領航員:趙峻 作業地址見我的博客。 二、代碼地址 https://coding.net/u/k2048/p/huangjindian/git/blob/master/main.c 三、總結 1、個人總結 本次作業我扮演駕駛員,趙峻扮演領航員,我負責算法實現以及代碼…

qtgl 鼠標平移 c++_羅技真愛粉的MX Master 3無線鼠標體驗

?這是一篇關于羅技MX Master3的曬單,順帶也翻出我的庫存清潔整理一下吧。在決定購買一款新鼠標的時候,我的第一目標其實是MX Vertical垂直鼠標,不過MX Vertical目前優勢只在外形上,在MX系列中明顯屬于低配,自由滾輪、…

java實驗指導書(實驗四)答案_java程序設計實驗指導書答案

? 狗生活在陸地上(是一種陸生動物),既是哺乳類的也是肉食性的。狗通常的時候和人打招呼會通過“搖搖尾巴”,在被撫摸感到舒服的時候,會“旺旺叫”,而在受到驚嚇情緒煩躁時,會發出“嗚嗚”聲;? 貓也生活在…

php代碼規范說明文檔

命名規則:采用駝峰標識,盡量做到見名知義 PHP編碼規范與原則: //命名:類,方法,函數,變量, 注釋:開發中難免留下一些臨時代碼和調試代碼,此類代碼必須添加注釋…

下載網頁中的圖片到本地

簡單的一個下載如下 : string url "http://avatar.csdn.net/A/2/6/2_yefengzhixia.jpg";string filepath "D:\\pic.jpg";WebClient mywebclient new WebClient();mywebclient.DownloadFile(url, filepath);MessageBox.Show("OK");…

nacos linux啟動_微服務系列之Nacos配置中心之一:Nacos介紹與安裝

一、Nacos 介紹Nacos 是 Alibaba 公司推出的開源工具,用于實現分布式系統的服務發現與配置管理。英文全稱 Dynamic Naming and Configuration Service,Na 為 Naming/NameServer 即注冊中心,co 為 Configuration 即配置中心,Servic…

演練:在組件設計器中創建 Windows 服務應用程序

http://msdn.microsoft.com/zh-cn/library/zt39148a(vvs.80).aspx 演練:在組件設計器中創建 Windows 服務應用程序 .NET Framework 2.0其他版本5(共 5)對本文的評價是有幫助 - 評價此主題注意 Visual Studio 標準版中不提供“Windows 服務”模…

絕對震撼 7款HTML5動畫應用及源碼

除非特別聲明,PHP100新聞均為原創或投稿報道,轉載請注明作者及原文鏈接 原文地址: http://www.php100.com/html/it/mobile/2014/0702/7030.html [導讀] 關于HTML5動畫,我們已經分享太多了,當然也有很多利用純CSS3實現的…

maven打包指定main函數

2019獨角獸企業重金招聘Python工程師標準>>> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> …

java 任意數平均值_【編程題】通過鍵盤輸入三個任意的數字,計算三個值的平均值,并輸出結果。...

【單選題】對放大電路測試NPN型硅管測得Ube>0,Ubc>0,Uce>0【簡答題】Even ordinary men understand now that the universe is something vaster and broader than ever thought before.【單選題】【其它】The Einsteins,however,could not afford to pay for the adv…

【轉】Direct3D頂點結構使用總結

【轉】Direct3D頂點結構使用總結 D3D里面最基本的就是頂點了&#xff0c;雖說一直在用&#xff0c;可是卻也是自己比較模糊的一個點&#xff0c;知道其中的意思&#xff0c;卻不是很清楚&#xff0c;今天就總結一下&#xff0c;掃一下這個盲區&#xff1a; D3D中的頂點緩沖區的…

quick cocos2d-x 精靈大小(寬高)獲取

quick下sprite的大小獲取&#xff0c;記錄一下&#xff1a; local w sprite:getContentSize().width local h sprite:getContentSize().height 今天連這個最基本的&#xff0c;都不知道怎么獲取。挺實用的代碼額~轉載于:https://www.cnblogs.com/vokie/p/3822248.html

velocityjs 動畫庫 比jquery默認的animate強

神坑記錄&#xff1a; 1、transform: translate3d(80%,0,0); 無法作為參數&#xff0c;必須修改為這種&#xff1a;translateX: 0% 官方文檔 http://velocityjs.org/ github地址 https://github.com/julianshapiro/velocity npm下載安裝 npm install velocity-animate --save-d…

python中的可變數據類型有列表和元組_Python中列表的 += 和 .extend() 的異同

一道Python題最近有朋友“考”了我一個Python的題&#xff1a;使用和.extend()兩種方法擴展元組中的列表會發生什么。雖然我對Python中的可變數據類型、不可變數據類型的概念都有較深的理解&#xff0c;并且也對list的、、.extend()、.append()做過性能分析&#xff0c;但是和.…

簡易貪吃蛇小游戲java版_用GUI實現java版貪吃蛇小游戲

本文實例為大家分享了java版貪吃蛇小游戲的具體代碼&#xff0c;供大家參考&#xff0c;具體內容如下項目結構新建一個JFrame窗口,作為程序入口public class GameStart{public static void main(String[] args) {JFrame jFrame new JFrame();jFrame.setBounds(100,100,900,720…

幾種代價函數

SAD&#xff08;Sum of Absolute Difference&#xff09;SAE&#xff08;Sum of Absolute Error)即絕對誤差和 SATD&#xff08;Sum of Absolute Transformed Difference&#xff09;即hadamard變換后再絕對值求和 SSD&#xff08;Sum of Squared Difference&#xff09;SSE&am…

Markdown文件導出為HTML的小程序

Markdown文件導出為HTML的小程序為什么做 最近把一些學習經驗記下來&#xff0c;總結成MarkDown文件&#xff0c;不知不覺已經有12篇了。 Sublime Text 的 MarkDown Preview 插件能夠將MarkDown語法轉換為HTML&#xff0c;并提供三種預覽方式&#xff1a;瀏覽器預覽、保存為HTM…

python制作自動回復腳本_python itchat實現微信自動回復的示例代碼

今天在實驗樓發現一個特別好玩的&#xff0c;Python 微信庫itchat,可以實現自動回復等多種功能&#xff0c;好玩到根本停不下來啊&#xff0c;尤其是調戲調戲不懂計算機的&#xff0c;特別有成就感&#xff0c;哈哈&#xff01;&#xff01;代碼如下&#xff1a;#codingutf8imp…

pta龜兔賽跑Java_PTA-龜兔賽跑

烏龜與兔子進行賽跑&#xff0c;跑場是一個矩型跑道&#xff0c;跑道邊可以隨地進行休息。烏龜每分鐘可以前進3米&#xff0c;兔子每分鐘前進9米&#xff1b;兔子嫌烏龜跑得慢&#xff0c;覺得肯定能跑贏烏龜&#xff0c;于是&#xff0c;每跑10分鐘回頭看一下烏龜&#xff0c;…

視頻壓縮算法的相關知識

視頻壓縮算法的相關知識MPEG-1MPEG 視頻壓縮編碼后包括三種元素&#xff1a;I幀&#xff08;I-frames&#xff09;、P幀&#xff08;P-frames&#xff09;和B幀&#xff08;B-frames&#xff09;。在MPEG編碼的過程中&#xff0c;部分視頻幀序列壓縮成為I幀&#xff1b;部分壓縮…