JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » .Net Framework » .NET Web Tech: Webform ,.net MVC  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
己加入精華區
by koji at 2008-11-13 13:50
本主題所含的標籤
無標籤
作者 IronRuby: Rails-like MVC without Rails [精華]
ray_linn

什么都不懂的小白

版主

發文: 540
積分: 10
於 2008-11-13 12:51 user profilesend a private message to usersend email to ray_linnreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
IronRuby是.NET下的一个Ruby实现,此外还有Ruby.net这一开源项目,二者的主要区别是IronRuby利用了Microsoft最新推出的DLR,而ruby.net则是完全利用原有的CLR实现的,二者的比较可以参考lam John的相关文章。目前IronRuby (SVN r118) 100% 兼容于Ruby 1.5.0规格书,可以顺利运行RubySpec的所有测试与例子,因此任何Ruby程序都可以不加修改的运行在IronRuby之上,其中包括Rails.

IronRuby的一大特点是,它是基于Microsoft的DLR,因此除了分享ruby世界的资源外,它也可充分利用.NET的庞大资源,例如LINQ,这意味着.NET中的ruby世界,别有一番天地。你可以组合ASP.NET MVC和activ record,或者是rails +LINQ,或者完全不需要rails,这完全取决于你的创造力。Lam John演示了如何利用ASP.NET MVC完全实现类似Rails的架构与功能.

先来个简单的"Hello,world"级别的。首先设置routes.(ASP.NET MVC的route)

1
2
$routes.map_route "{controller}/{action}/{id}"
{ :controller='Home', :action='index', id=''}


然后与rails的程序类似,开始contoller的编写:
1
2
3
4
5
class HomeController < Controller
   def index
     view HomeModel.new
   end
end


和rails不一样的地方在于,其继承的父类是ASP.NET MVC的Controller类 ,而不是rails的ApplicationController.

最后在models目录下放入HomeModel.rb,我们的数据来自于内存。
1
2
3
4
5
class HomeModel 
  def salutation
   "Hello,World"
  end
end


然后是一个最简单的page,你可以命名成aspx,或者遵循ruby世界的规则,以rhtml为后缀,views\home\index.rhtml.
1
<h2>$model.saluation</h2>


这是一个最简单的MVC例子,稍后是更复杂的例子Controller它有两个action:index和list.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
require "helper/contoller"
require "ProductModel"
class ProductsController < BaseController
   def index 
     model=ProductsModel.new
     @message="Hi,Mom"
     @categories=mode.get_categories
     return_view
   end
 
   def list
    @category=params[:id]
    model=ProductsModel.new
    @products=mode.get_products_for_category @category
    return_view
   end
end 


这里特别指出的,暂时我们用实例变量与view端通讯,但是Lam John承诺,目前只是作为原型来研究而已,以后必然会做出修改。接下里的model就更简单,它只是visual studio包装的northwind数据库的适配器。
1
2
3
require "helpers/model"
class ProductsModel <NorthWindDatabase
end

NorthWindDatabase是个C#的类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class NorthWindDatabase :NorthWindResposity{
  public List<Category> GetCategories(){
    return Categories.ToList();
  }
 public Category GetCategory(String name){
   return Categories.SingleOrDefault(c =>C.CategoryName==name);
 }
 
 public List<Product> getProductsForCategory(String name){
   var category=GetCategory(name);
   var products= from p in Products where p.CategoryId==category.CategoryId select p;
   return products.ToList();
 }
}

如果你觉得利用Visual studio生成NorthWind的wrapper不符合你的习惯,那么完全可以把ProductsModel改成ActiveRecord的实现。

view端
1
2
3
4
5
6
7
  <% $view_data.categories.each{|category|%>
   <li> <a href="/products/list/<%=category.category_name%>">
       <%=category.category_name%></a>
   </li>
 <%
  }
%>

view端是完全的asp.net


ray_linn edited on 2008-11-14 08:56
reply to postreply to post
飞翔的候鸟
話題樹型展開
人氣 標題 作者 字數 發文時間
2134 [精華] IronRuby: Rails-like MVC without Rails ray_linn 2606 2008-11-13 12:51
2239 Re:IronRuby: Rails-like MVC without Rails ray_linn 1166 2008-11-13 12:53
» JWorld@TW »  .Net Framework » .NET Web Tech: Webform ,.net MVC

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8