MonoRail - 简介

MonoRail是一款基于.NET的MVC框架,采用FrontController模式处理HTTP请求。它提供智能参数绑定、过滤器支持、模板引擎等功能,简化了Web应用程序的开发过程。

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循环足够了. 唯一缺的就是ComponentOne, Infragistic等大厂家做的那一类商业表格. 但是不要忘了, 还有AspNetViewEngine可以用, 如果你还觉得它不爽的话, 这一部分用回webform又有何不可?

应用案例

目前只知道一个: www.viavirtualearth.com

 
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)内容概要:本文档围绕基于遗传算法的异构分布式系统任务调度算法展开研究,重点介绍了一种结合遗传算法的新颖优化方法,并通过Matlab代码实现验证其在复杂调度问题中的有效性。文中还涵盖了多种智能优化算法在生产调度、经济调度、车间调度、无人机路径规划、微电网优化等领域的应用案例,展示了从理论建模到仿真实现的完整流程。此外,文档系统梳理了智能优化、机器学习、路径规划、电力系统管理等多个科研方向的技术体系与实际应用场景,强调“借力”工具与创新思维在科研中的重要性。; 适合人群:具备一定Matlab编程基础,从事智能优化、自动化、电力系统、控制工程等相关领域研究的研究生及科研人员,尤其适合正在开展调度优化、路径规划或算法改进类课题的研究者; 使用场景及目标:①学习遗传算法及其他智能优化算法(如粒子群、蜣螂优化、NSGA等)在任务调度中的设计与实现;②掌握Matlab/Simulink在科研仿真中的综合应用;③获取多领域(如微电网、无人机、车间调度)的算法复现与创新思路; 阅读建议:建议按目录顺序系统浏览,重点关注算法原理与代码实现的对应关系,结合提供的网盘资源下载完整代码进行调试与复现,同时注重从已有案例中提炼可迁移的科研方法与创新路径。
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文提出了一种基于非支配排序的蜣螂优化算法(NSDBO),用于求解微电网多目标优化调度问题。该方法结合非支配排序机制,提升了传统蜣螂优化算法在处理多目标问题时的收敛性和分布性,有效解决了微电网调度中经济成本、碳排放、能源利用率等多个相互冲突目标的优化难题。研究构建了包含风、光、储能等多种分布式能源的微电网模型,并通过Matlab代码实现算法仿真,验证了NSDBO在寻找帕累托最优解集方面的优越性能,相较于其他多目标优化算法表现出更强的搜索能力和稳定性。; 适合人群:具备一定电力系统或优化算法基础,从事新能源、微电网、智能优化等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微电网能量管理系统的多目标优化调度设计;②作为新型智能优化算法的研究与改进基础,用于解决复杂的多目标工程优化问题;③帮助理解非支配排序机制在进化算法中的集成方法及其在实际系统中的仿真实现。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注非支配排序、拥挤度计算和蜣螂行为模拟的结合方式,并可通过替换目标函数或系统参数进行扩展实验,以掌握算法的适应性与调参技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值