zoukankan      html  css  js  c++  java
  • 顶着Rails的浪潮,用NDO + Castle的monorail 也来秀一把

    Rails 技术自从2004年7月出来后,在整个IT业界引起了巨大的震动,现在的JAVA 开源领域也RAILS了,.Net 在Castle项目下也Rails了,Castle下的monorail已经IRC了。我对rails技术非常看好,但是看到monorail的模型层用的是Castle 的ActiveRecord ,就开始对monorail有了些许抵触的思想情节,继续往下看,看到模板有3个选择,第一NVelocity,第二Aspx,第三是Brail,当时我对Velocity/NVelocity已经很熟了,但是对NVelocity 有抵触(因为NVelocity 的作者已经说过了以后不会在更新NVelocity了,NVelocity 还有不少Bug呢,为了使用NVelocity 我就把NVelocity的Bug修改了4/5处),aspx的引擎支持的非常弱,Brail的视图引擎用的是Boo语言,又不熟悉,当时对monorail有一点不是特别看好。昨天在博客园上看到了一个兄台说Castle IRC Release1.0了,我怀着好奇心从官方网站上下载了monorail进行安装。首先看看版本,确实 Release1.0,再看看NVelocity 的版本,非常惊奇升级了,从0.42升级到0.5了,然后把以前的版本的NVelocity换成新的,测试通过了----无缝兼容,太棒了!马上进行实验,因为我对Castle 的ActiveRecord 的性能和BUG之多和偏见就用NDO来代替了。

             1:首先在VS2003下根据Monorail的插件向导新建一个monorail的项目NW,该向导已经自动给你生成整个系统框架了,包含dll的引用,系统的配置,以及控制器和视图目录等!太方便了,节约了我很多配置的时间了,哈哈!
             2:添加NDO组件引用,在项目中建一个"Models"的文件夹,用NDO工具生成一个强类型的活动记录

    public class Region:ActiveRecord
        
    {
            
    构造函数

            
    属性
            
            
        }


             3:   在"Controllers"的文件夹中添加一个RegionController类,让这个类继承自SmartDispatcherController,添加布局Layout(asp.net 中的master page)和异常处理的配置如

     using Castle.MonoRail.Framework;
     [Layout(
    "default"), Rescue("generalerror")]
     
    public class NRegionController:SmartDispatcherController
     
    {
     }
             

          4:    在RegionController类中导入模型层的包,并且增加New,Create,Delete,Edit,Update,List几个空的Action方法
          5:在"Views"的目录下新增一个Region的目录(对应控制器RegionController),然后在Region 目录下新增new.vm,edit.vm,list.vm(视图的名称必须和Action方法名保持一致,这是Rails框架的约定--"约定胜于配置")三个页面
          6:   开始正式编码了,首先完成控制器代码,代码如下,非常简单

    public void New(){}

            
    public void Create([DataBind("rg")] Region model)
            
    {
                
    try
                
    {
                    model.Save();
                }

                
    catch(Exception ex)
                
    {
                    
    this.Flash["error"= "Could not save Region. " + ex.Message;
                }

                
    this.RedirectToAction("list");
            }


            
    public void Delete(int id)
            
    {
                
    try
                
    {
                    Region rg 
    = new Region();
                    rg.Delete(id);
                }

                
    catch(Exception ex)
                
    {
                    
    this.Flash["error"= "Could not Delete Region For ID =. " + id.ToString() + ex.Message;
                }

            }


            
    public void Edit(int id)
            
    {
                
    try
                
    {
                    Region rg 
    = new Region();
                    rg.LoadByKey(id);
                    
    this.PropertyBag["rg"=rg;
                }

                
    catch(Exception ex)
                
    {
                    
    this.Flash["error"= "Could not Load Region. " + ex.Message;
                }

            }


            
    public void Update([DataBind("rg")] Region model)
            
    {
                
    try
                
    {
                    model.Update();
                }

                
    catch(Exception ex)
                
    {
                    
    this.Flash["error"= "Could not save Region. " + ex.Message;
                }

                
    this.RedirectToAction("list");
            }


            
    public void List()
            
    {
                
                
    try
                
    {
                    
    this.PropertyBag["rows"= new Region().Find();
                }

                
    catch(Exception ex)
                
    {
                    
    this.Flash["error"= "Could not List Region. " + ex.Message;
                }

            }

    7:写视图
          list.vm代码:

    Region List:
    <p>
    <p>
    Create a New Region $htmlHelper.LinkTo("New","new")
    </p>
    <table width="100%" border="1" cellpadding="2" cellspacing="0">
        
    <tr>
            
    <th>ID</td>
            
    <th>Description</td>
            
    <th></td>
        
    </tr>
        #foreach($row in $rows)
        
    <tr>
            
    <td align=center>$row.RegionID</td>
            
    <td align=center>$row.RegionDescription</td>
            
    <td align=center>
                
    $htmlHelper.LinkTo("Edit","region","edit",$row.RegionID) |
                $htmlHelper.LinkTo("Delete","region","delete",$row.RegionID)
            </td
    >
        
    </tr>
        #end
    </table>

       new.vm 里面包含了验证框架的一个简单测试

    <h3>New Region</h3>

    $ValidationHelper.InstallScripts()
    $ValidationHelper.SetSubmitOptions(false, false, true, 5)

    <form action="create.rails" method="post" onsubmit="$ValidationHelper.GetValidationTriggerFunction()">

        
            
    <p>
            ID: $FormHelper.TextField("rg.RegionID")
            
    </p>

            
    <p>
            Desc: 
    <input type=text name="rg.RegionDescription" validators="blank"/>
            
    </p>

        
    <p>
        
    <input type="submit" value="Create" />
        
    </p>

    </form>

    edit.vm 比较简单(没有包含验证)

    <h3>Edit Product</h3>

    <form action="update.rails" method="post">

        
    <p>
        ID: $FormHelper.TextFieldValue("rg.ID",$rg.ID)
        
    </p>

        
    <p>
        Desc: $FormHelper.TextFieldValue("rg.RegionDescription",$rg.RegionDescription)
        
    </p>

        
    <hr/>

        
    <p>
        
    <input type="submit" value="Update" />
        
    </p>

    </form>

       最后是一个Layout 的模板页default.vm

    <!DOCTYPE html PUBLIC 
      "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
    >
    <html xmlns="http://www.w3.org/1999/xhtml">
    <html>
        
    <head>
            
    <title>Layout</title>
            
    <style type="text/css" media="screen">
    body
    {
        background-color: white;
        font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
        font-size: small;
    }        
            
    </style>
        
    </head>
        
    <body>
    你好同志!
    <br/>

    #if($Flash.error)
    <style="color: red; font-weight: bold;">
        $Flash.error 
    </br>
    </p>
    #end

    #if($Flash.sucess)
    <div style="backcolor: yellow; font-weight: bold;">
        $Flash.sucess 
    </br>
    </div>
    #end
    $childContent    
        
        
    </body>
    </html>

    8: 最后把NW的项目发布到IIS下(默认的Monorail项目都是类库项目,必须手工发布),并且在iis下添加一个对".rails"的ISAPI扩展的配置
    9:在IE下输入http://localhost/nw/region/list.rails,竟然都出来了,然后继续测试增删改的方法,一路绿灯,全过了,太简单了,实在是强大!!!

  • 相关阅读:
    hadoop再次集群搭建(3)-如何选择相应的hadoop版本
    48. Rotate Image
    352. Data Stream as Disjoint Interval
    163. Missing Ranges
    228. Summary Ranges
    147. Insertion Sort List
    324. Wiggle Sort II
    215. Kth Largest Element in an Array
    快速排序
    280. Wiggle Sort
  • 原文地址:https://www.cnblogs.com/netcasewqs/p/556891.html
Copyright © 2011-2022 走看看