`

简单看了ROR,真是简单

    博客分类:
  • ROR
阅读更多
        看了《Agile Web Development with Rails》前面四章,觉得RoR确实是比较简捷。其实,ROR的应用领域也就是在WEB应用开发上,而在这个领域上,我用JAVA已经有很长时间了。MVC模式,ORM在JAVA领域已经是耳熟能祥的常识了。
       唉,图插不近来,不爽。

       下面主要比较JAVA基于Struts, Hibernate和ROR的MVC框架在实现上有何异同。
      
      相同点有很多:
       对于一个请求URL,在JAVA当中,有Servlet来处理URL的请求,Struts经过定义actionmapping的配置文件,Action,ActionForm来找到正确的处理请求的Action。
       而在ROR中,有一个Router来控制对于URL的请求。对于用户的URL请求,它的组织形式固定。http://localhost:3000/say/hello,那么RoR会实例化SayController,调用Controller中的hello方法来处理URL的请求。
 
       这里的Controller相当于我们的Action。应该进一步讲,Controller中的method相当于我们的Action。在JAVA中,Action不是线程安全的,我想在ROR中,Controller肯定也不会是线程安全的(may be,这个不确认,如果这样的话,那么在Controller类中就不能含有任何Controller的实例变量)。
      
      控制器的作用是处理请求,调用Model完成数据库操作,然后把得到的结果传给VIEW端进行显示。我们平时在Action中已经做过了很多这样的事情。只不过,我们在Action和ORM之间加了一层,叫做业务逻辑层。一般,Action -> ××Service -> ××Dao 完成业务逻辑操作,同时,还需要向即将显示的View中设置很多显示页面所需要的变量。
      因此,我们会在Action当中向Request,Session中设置很多值。所以,在咱们的程序中会经常出现这样的语句。request.setAttribute("a", objectA); request.getSession.setAttribute("b", objectB),络绎不绝。其实很讨厌,但是没有办法,必须要设置,不然就显示不了。
      那么,ROR也是需要向View设置值的。只不过它在Controller中的Method中设置传递给View的变量
ruby 代码
 
  1. def methodA  
  2.       @time = Time.now;  
  3. end  
      这样子,在View所对应的rhtml中,就可以输出这个@time的值。
rhtml 代码
  1. <%= @time %>  

     其实就是取得刚才设置进去的变量。这个变量放在什么地方呢?无非就是在request,session,或者application上。只是现在我不知道具体放在什么地方而已

     对于View,我就不用说什么了。人家用的是rhtml,JAVA用的是JSP,两者都是在html上迁入表达式。其根本,还是要转换为HTML这个标准形式。因此,对于javascript这样的页面客户端脚本语言都没有影响,应该js以前你怎么用,现在还怎么用就ok。

     下面说几个我觉得ROR简单的:
  1.      ror的开发用web server可是自动重载的哦,不像在java中,改动一下java代码,必须重新编译,然后部署到application server当中,然后运行。在我的机器上,ant之后,启动tomcat,一般时间在4分钟左右。相当的不爽。一直以来,提高开发效率是我们做开发的最为关注的事情。
  2.     ROR相关的工具真是好。建立一个项目,rails demo,然后程序结构就出来了。启动服务器,ruby script/server;自动生成Controller, ruby script/generator Controller Say。你看看,简单嘛,一下子给你生成你要完成的小工作集。至少不用向我们在java中一样,首先去创建一个Action,然后去创建ActionForm,然后去修改Struts-config.xml,然后去新建JSP,然后去ant,然后去启动server,然后等着,然后在启动浏览器,然后http://, 然后如果有错,又得重新ant,server,等,启动浏览器,这样的日子何时是个尽头啊。
     因此,两者相较,确实ROR方便。对于我来说,有这两点,足以让我选择好好学习ROR了。  
    








 
分享到:
评论
13 楼 dennis_zane 2007-04-06  
远远偏离这个板块的主题了,应该转到java版:)
12 楼 hiwzg 2007-04-06  
当然还不至于用ANT来去做调试,不可能呀:)

昨天看了你的一篇文档,讲如果设置两个关联项目的属性,以支持TOMCAT热部署的。

很可惜,我的用不上。一旦改变源码,编译之后,Tomcat又得Reload Context,而在Reload Context的过程中,由于系统使用了以前留下来的实体工具(一种ORM工具)代码,导致TransactionFactory不能正常初始化,抛出异常。不能正常加载Context。

所以想要在本地hot deploy项目,基本上是没招了。

后来想了一个没有办法的办法:
在我本本上又ant,又tomcat,实在是比较耗内存,耗时间。只好将耗时间的Tomcat给放到其它机器上。在其它的机器上启动tomcat,我这边webapp设置为共享,将docbase设定到共享所对应的网络驱动器上就OK。

好歹将ant和启动tomcat分开在两台机器上。虽然比热部署要慢。但好歹我本本上的速度快了:)


Lucas Lee 写道
hiwzg 写道
这一点我确实做的是有问题。

由于我们的源代码是分权限控制的,得不到所有的源码,因此,我们的classes是被源代码管理的,编译了java文件之后必须得上传,使用的是统一的ant脚本。这一步会比较耗时间。

一般在Eclipse中开发web应用的方法,就是建立web类project。如tomcat project, web project等。将src编译的代码设置到classes下,appliction server在Debug模式下就能够自动替换。

应该在本地配置这种开发模式。然后classes还是得上传,真是比较麻烦。需要做重复劳动。


这种模式真是要命啊。

控制源码还有一些其他的模式,比如分开成为几个子项目,每个项目单独打包成jar,本项目的源码都开放。
是在要这么干,也可以将class文件也放到CM软件中,这样在本地能调试。

使用ant是在自动构建时用的玩意,用那个来调试不是要了老命了。
11 楼 jerry 2007-04-06  
只是我感觉ROR的速度问题,纯对不是小事.缓存的设置我感觉还是少一些比较好的资料.
10 楼 LucasLee 2007-04-05  
hiwzg 写道
这一点我确实做的是有问题。

由于我们的源代码是分权限控制的,得不到所有的源码,因此,我们的classes是被源代码管理的,编译了java文件之后必须得上传,使用的是统一的ant脚本。这一步会比较耗时间。

一般在Eclipse中开发web应用的方法,就是建立web类project。如tomcat project, web project等。将src编译的代码设置到classes下,appliction server在Debug模式下就能够自动替换。

应该在本地配置这种开发模式。然后classes还是得上传,真是比较麻烦。需要做重复劳动。


这种模式真是要命啊。

控制源码还有一些其他的模式,比如分开成为几个子项目,每个项目单独打包成jar,本项目的源码都开放。
是在要这么干,也可以将class文件也放到CM软件中,这样在本地能调试。

使用ant是在自动构建时用的玩意,用那个来调试不是要了老命了。
9 楼 hiwzg 2007-04-05  
多谢指点。这块我确实没有研究过。现在JVM的GC做得这么好了。:)

bigpanda 写道
hiwzg 写道
如果是这样的话,对于每个请求,都要去new一个Controller对象。当访问量很多的时候,那得去new多少这样的对象?像这样的Controller,为什么不作为Singleton?我认为非线程安全的对效率还是有好处的。

不然,这么多对象,即便用Cache的话,也还是有性能损失啊。


在当代JVM下,new一个对象的额外花销微乎其微,可以忽略不计,Struts2/WebWork 就是这么设计的。Struts1的设计者都说了,他设计Struts1的时候,用的还是java 1.2, GC的效率不够高,要不他也设计成每个request new 一下 Action 了。

WebWork的Action是有状态的,可以说是Controller和Model划分不够清楚,所以这里不能做成Singleton。Spring MVC的Controller,有一种是没有状态,可作为Singleton的。

原文中话得这么说,在Struts 1以下,Action不是线程安全的,在Struts2/WebWork,对每个请求生成一个新的Action实例,因而没有线程安全的问题。

8 楼 hiwzg 2007-04-05  
这一点我确实做的是有问题。

由于我们的源代码是分权限控制的,得不到所有的源码,因此,我们的classes是被源代码管理的,编译了java文件之后必须得上传,使用的是统一的ant脚本。这一步会比较耗时间。

一般在Eclipse中开发web应用的方法,就是建立web类project。如tomcat project, web project等。将src编译的代码设置到classes下,appliction server在Debug模式下就能够自动替换。

应该在本地配置这种开发模式。然后classes还是得上传,真是比较麻烦。需要做重复劳动。


Lucas Lee 写道
yananay 写道
引用

ror的开发用web server可是自动重载的哦,不像在java中,改动一下java代码,必须重新编译,然后部署到application server当中,然后运行。在我的机器上,ant之后,启动tomcat,一般时间在4分钟左右。相当的不爽。一直以来,提高开发效率是我们做开发的最为关注的事情。


佩服你是怎么做的,可以热部署的.....俺用weblogic都没你那么费劲.


是啊,使用Eclipse或JBuilder都可以用调试方式启动application server,然后可以支持Java class的热替换,就是不用重启server就使用修改后的代码。
当然有一定限制,就是修改后的代码没有修改protected及以上的接口。
7 楼 bigpanda 2007-04-04  
hiwzg 写道
如果是这样的话,对于每个请求,都要去new一个Controller对象。当访问量很多的时候,那得去new多少这样的对象?像这样的Controller,为什么不作为Singleton?我认为非线程安全的对效率还是有好处的。

不然,这么多对象,即便用Cache的话,也还是有性能损失啊。


在当代JVM下,new一个对象的额外花销微乎其微,可以忽略不计,Struts2/WebWork 就是这么设计的。Struts1的设计者都说了,他设计Struts1的时候,用的还是java 1.2, GC的效率不够高,要不他也设计成每个request new 一下 Action 了。

WebWork的Action是有状态的,可以说是Controller和Model划分不够清楚,所以这里不能做成Singleton。Spring MVC的Controller,有一种是没有状态,可作为Singleton的。

原文中话得这么说,在Struts 1以下,Action不是线程安全的,在Struts2/WebWork,对每个请求生成一个新的Action实例,因而没有线程安全的问题。

6 楼 divsun 2007-04-04  
ROR应该是简约而不简单!
5 楼 hiwzg 2007-04-04  
如果是这样的话,对于每个请求,都要去new一个Controller对象。当访问量很多的时候,那得去new多少这样的对象?像这样的Controller,为什么不作为Singleton?我认为非线程安全的对效率还是有好处的。

不然,这么多对象,即便用Cache的话,也还是有性能损失啊。

刑天战士 写道
谁说Controller不是线程安全的?每个Controller都是一个单独的实例,而Action对于每个servlet来说是唯一的实例!
4 楼 刑天战士 2007-04-04  
谁说Controller不是线程安全的?每个Controller都是一个单独的实例,而Action对于每个servlet来说是唯一的实例!
3 楼 LucasLee 2007-04-04  
yananay 写道
引用

ror的开发用web server可是自动重载的哦,不像在java中,改动一下java代码,必须重新编译,然后部署到application server当中,然后运行。在我的机器上,ant之后,启动tomcat,一般时间在4分钟左右。相当的不爽。一直以来,提高开发效率是我们做开发的最为关注的事情。


佩服你是怎么做的,可以热部署的.....俺用weblogic都没你那么费劲.


是啊,使用Eclipse或JBuilder都可以用调试方式启动application server,然后可以支持Java class的热替换,就是不用重启server就使用修改后的代码。
当然有一定限制,就是修改后的代码没有修改protected及以上的接口。
2 楼 hiwzg 2007-04-04  
唉,因为代码权限控制的原因,项目组里不是每个人都可以拿到整个项目的源代码。编译的时候,需要先从配置库中下载新classes,然后edit,这个时候,已经需要大概2分钟,然后编译,又需要2分钟。所以比较耗时。

你的做法,肯定是直接将java代码编译到WEB-INF下的classe中了,服务器检测到变化就会自动加载。

1 楼 yananay 2007-04-04  
引用

ror的开发用web server可是自动重载的哦,不像在java中,改动一下java代码,必须重新编译,然后部署到application server当中,然后运行。在我的机器上,ant之后,启动tomcat,一般时间在4分钟左右。相当的不爽。一直以来,提高开发效率是我们做开发的最为关注的事情。


佩服你是怎么做的,可以热部署的.....俺用weblogic都没你那么费劲.

相关推荐

    RoR性能优化经验谈

    RoR(Ruby on Rails)是一种流行的开源Web开发框架,以其高效和简洁的代码著称。然而,随着网站规模的增长,性能优化成为必不可少的环节。在本文中,我们将探讨一些RoR性能优化的关键方面,主要基于JavaEye网站在...

    ror

    NULL 博文链接:https://xuxiangpan888.iteye.com/blog/266696

    ror中文资料

    3. **方法和块**:Ruby中的方法定义简单,可以接受参数,并通过return语句返回值。块是Ruby的一个重要特性,类似于匿名函数,可以用在循环、筛选、映射等操作中。 4. **对象和类**:Ruby是纯面向对象的语言,每个值...

    RoRBlog 基于RoR的博客系统

    基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。

    神经网络ror resenet模型

    **神经网络Ror ResNet模型详解** 在深度学习领域,ResNet(残差网络)模型是具有里程碑意义的创新,由He et al.在2015年提出。该模型解决了深度神经网络训练中的梯度消失问题,允许构建非常深的网络结构。而“Ror”...

    初探ROR

    1. ActiveRecord:Ruby on Rails的ORM框架,通过简单的Ruby代码即可完成复杂的数据库操作。 2. Active Record查询接口:提供了丰富的查询语法,如链式查询和条件查询。 3. Testing:Rails内置测试框架,包括Unit ...

    ror实例

    Ruby on Rails(简称RoR或Rails)是一种基于Ruby语言的开源Web应用框架,它遵循Model-View-Controller(MVC)架构模式,旨在提高开发效率并提供简洁、优雅的代码结构。"ror实例"可能指的是在学习或实践中,通过创建...

    ROR安装必备所有架包

    在Ruby on Rails(ROR)开发环境中,安装和配置正确的依赖包是至关重要的。这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails...

    RoR选题方向—源代码

    Ruby on Rails(RoR)是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程。在这个选题方向中,我们主要探讨的是与RoR相关的源代码分析和学习。源代码是...

    Windows 上搭建 ROR环境

    - **安装过程**:Ruby的安装相对简单,只需访问官方提供的下载页面,选择适合Windows系统的安装包进行下载。安装过程中,默认选项即可,如有特殊需求可自行调整。 ##### 2. 安装DevKit - **DevKit作用**:DevKit是...

    ROR 文件的上传与下载

    ### ROR 文件的上传与下载:深入解析与实践 在Ruby on Rails(简称ROR)框架下,处理文件的上传与下载是一项常见的需求,尤其是在构建包含媒体内容的应用程序时。本文将基于给定的文件信息,详细阐述如何在Rails...

    ROR绿色最新环境(2013/3/10)

    ROR环境 Ruby version 1.9.3 (java) RubyGems version 1.8.24 Rack version 1.4 Rails version 3.2.12 JavaScript Runtime therubyrhino (Rhino) Active Record version 3.2.12 Action Pack version 3.2.12 ...

    RoR 培训课程PPT

    - **实战项目**:通过实际构建项目来加深对理论知识的理解,推荐尝试开发一个简单的博客系统或电子商务平台。 #### 四、结语 通过这五天的培训课程,学员将能够熟练掌握RoR的基本开发技能,并具备独立构建完整Web...

    javarebel 用JAVA和ROR一样方便测试

    破解版本的JAR包,放到本地磁盘,ECLIPUS直接用,到JVM设置直接加 -noverify -javaagent:D:\javarebel.jar

    机遇ROR 的图书管理系统

    《机遇ROR的图书管理系统》是一份以Ruby on Rails(简称ROR)技术为核心,旨在构建高效、便捷的图书管理解决方案的学习资料。Ruby on Rails,是基于Ruby编程语言的开源Web应用框架,它遵循MVC(Model-View-...

    freemis 基于ror框架的mis

    FreeMIS是一个基于Ruby on Rails(RoR)框架构建的管理信息系统(MIS)。RoR是由David Heinemeier Hansson开发的一个开源Web应用程序框架,它遵循“Don't Repeat Yourself”(DRY)原则,强调简洁和生产力。RoR使用...

    敏捷开发第二版ROR必看

    **敏捷开发第二版ROR必看** 在编程领域,Ruby on Rails(简称ROR)是一个深受开发者喜爱的开源Web应用程序框架,它基于Ruby语言,强调简洁、高效的代码编写。"敏捷开发第二版ROR必看"这个主题,指的是对敏捷开发...

    ROR环境配置

    在IT行业中,Ruby on Rails(简称ROR)是一款基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用开发过程,提高开发效率。本文将深入探讨如何配置ROR开发环境,以及...

    ror留言板程序

    "ror留言板程序"是一个基于Ruby on Rails框架开发的简单应用,它主要用于实现用户在网站上留言和查看他人留言的功能。Ruby on Rails(简称RoR)是用Ruby语言编写的开源Web应用程序框架,遵循MVC(Model-View-...

Global site tag (gtag.js) - Google Analytics