
正文
ruby生成java代码 ruby encode
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Rails 开发与 Java 编程的比较
年 月 日
Ruby on Rails 开发和 Java# ; 开发有着本质的不同 在 跨越边界 系列的最后一期中 Bruce Tate 将概述使用 Rails 从头开发一个复杂 可伸缩的 Web 站点时所发现的二者的主要差异
Rails 开发人员常常把 Java 开发人员看作是沉闷而劳碌的老古董 而 Java 崇拜者则常常认为 Ruby on Rails 只是一个玩具 根本不能用于任何严肃的软件开发 作为一名对这两种技术都有着广泛使用经验的顾问 我认为真实的情形介于这两种观点之间 由于跨越边界 系列文章即将结束 因此我打算对它们再作一次比较 本文并非考察某种特殊的技术或语言 而是主要介绍我当前正在从事的项目 并将它与我以前从事的 Java 项目进行比较 另外 我建议您阅读 跨越边界 系列的前几期文章 对相关主题作更深入的了解 这种直接的说明可让您在二者之间权衡利弊 并可能使您在数据库 Web 应用程序 green field 的开发中通过使用 Rails 获益
业务问题
关于本系列
在 跨越边界 系列文章中 作者 Bruce Tate 提出这样一种观点 当今的 Java 程序员们可以通过学习其他方法和语言更好地武装自己 自从 Java 技术明显成为所有开发项目最好的选择以来 编程前景已经发生了改变 其他框架影响着 Java 框架的构建方式 从其他语言学到的概念也可以影响 Java 编程 您编写的 Python(或 Ruby Smalltalk 等语言)代码可以改变编写 Java 代码的方式 本系列介绍与 Java 开发完全不同的编程概念和技术 但是这些概念和技术也可以直接应用于 Java 开发 在某些情况下 需要集成这些技术来利用它们 在其他情况下 可以直接应用概念 具体的工具并不重要 重要的是其他语言和框架可以影响 Java 社区中的开发人员 框架 甚至是基本方式
不论是 Ruby on Rails 框架还是任何 Java 框架都不能解决所有问题 为了提高成功的几率 需要长期 细致地考察业务问题 理解周围的各种假定情况 以及了解您的团队 只有这样才能选出正确的语言来进行开发
去年 Arvato Systems 聘请我带领团队构建 Ch 它是一种新平台 用于将非赢利性团体和捐赠人组织在一起 与很多 Internet 公司一样 我们向客户展示了可购买的实际产品 与其他公司不同的是 这些 产品 指的是提供机会 比如 一名癌症研究员一小时服务收费 美元 帮助盲人收费 美元 或者保护一英亩雨林一个月收费 美元 我们面临两大挑战 一份很紧凑的时间表和长期的复杂性
开发工作从九月份开始 要求必须在十一月份之前建立起一个站点 以便有机会赶上圣诞节期间的通信量高峰 (最终我们超出了十一月份这个期限两星期 )在其他开发语言中 基于 Java 的解决方案可能要花费 到 个月才能完成这一任务 因此生产力是一个很重要的考虑因素 这与 Java 部署思想相悖
通过对竞争对手和项目的考察 我们了解到 我们希望能够每天给站点带来几百万次点击的通信量 而我们需要每天有几十万次成功的点击 因此可伸缩性也是一个考虑因素 这与 Java 部署思想相符
最后 我们了解到 发布初始站点只是一个开始 我们只实现了总体规划的百分之三 因此我们所选的技术需要根据复杂性和负载作出一些调整 我认为 Ruby 语言在复杂性方面会更易于调整 因为它提供了对更高级语言和特性(如开放类)的支持 以及具有更少配置需求和更简单 集成化编程模型的 Rails 框架
虽然我们面临着时间和可伸缩性方面的挑战 但是也拥有一些其他的有利因素 我们拥有一张完全空白的候选名单 可以选择想要的任何技术 任何团队 可以定义项目 培训和全部的技术 我们可完全自由地作出选择
Java 语言是一种优秀的通用语言 它总是应用于新的技术领域 如嵌入式系统和移动设备 Java 语言在广泛关注的集成方面也表现优秀 它具有高性能 流行并受到平台的良好支持 但是正如您在本系列中所了解到的那样 Java 语言并不是用于数据库支持的 Web 应用程序的 green field 开发的最佳选择
相比之下 Ruby on Rails 框架则是新的 并没有很多人使用 Rails 开发高通信流量的站点 并且几乎不存在什么使用 Rails 多年开发项目的经验 但它仍然是一种高生产力的数据库支持的 Web 应用程序开发的框架 最后 尽管我们对 Rails 缺乏开发长期项目的经验和并未得到广泛部署有所顾虑 但那份紧凑的时间表驱使我们选择了 Ruby on Rails
作出这个决定之后 我们发现招募项目人才非常容易 我们还发现早期的生产力优势非常显著 —— 甚至比预期的还要好 我们确实遇到了一些早期的稳定性问题 因此加强了测试工作的力度 此后稳定性得到了极大的改进
原理
每个框架设计者都使用一组假定来构造该框架的重写原理 学习遵守该原理的约束可使您愉快地进行编程 而挑战这些约束则会使您的编程受挫 Rails 框架和 Java 框架拥有很多不同的原理
Rails 是一种集成框架 需要使用高度利用 Ruby 语言的动态本质 Rails 开发人员强调框架的生产力特性而不是工具特性 并且常常将 Web 架构看得非常简单 在本系列的前几篇文章中您已了解到这一点 Java 设计者通常必须分块地组合开发环境 独立地选择持久性 Web 和集成层 他们通常严重地依赖工具来简化核心任务 Web 架构设计趋向于较为复杂
完全集成
Java 框架往往是解决一个小问题(比如持久性或查看组织) 而 Rails 则是一个集成环境 Rails 开发人员的优势在于不必解决与许多不同框架集成的问题 大多数 Hibernate 开发人员陷入了过早关闭与 Java Web 框架之间的连接的陷阱 Rails 视图框架是从头构建的 以便与 ActiveRecord 集成(Rails 持久性框架) 当您考察用于 Web 服务 配置和插件的 Rails 框架时也会发现类似的经验 Java 编程支持各种不同的框架 对于所有这些框架使用不同的集成策略
Java 开发人员的优势在于选择 如果您需要从头构建一个框架 则可能要考虑使用基于 SQL 的解决方案用于数据库集成(如 iBATIS 或 Java 编程中基于 JDBC 的包装框架之一) 反过来 如果要使用一种古老的模式进行编程 则可能要使用对象关系映射框架(如 Hibernate) 相比之下 如果您使用 Rails 则拥有一个主要选择 ActiveRecord 这意味着 Java 框架提供了更多的选择 有时能提供更好的集成开发项目的解决方案 但是由于我们要开发一个 green field 项目 因此选择算不上是一个问题
一种动态语言
Rails 原理的下一个主要部分是动态编程语言 Java 工具往往可以有效地使用 Java 类型模型提供的额外信息 工具可以识别错误和有效地重构代码 Rails 还可有效地利用编程语言的优点 Ruby 是一种构建特定于域的语言(DSL)的理想语言 Rails 集中使用 DSL 来完成从构建模型对象之间的关系到指定自定义组件(如状态机器或可上传的图像)的所有工作 动态语言常常更加简洁 因此 Rails 项目比 Java 项目要简练得多 可让用户更简练地表达代码和配置 在 Ch 项目中 我们发现技术顶尖的程序员可达到更高的生产力 但是我们确实需要招募经验更丰富的开发人员 我对这种妥协非常满意
传统的 Java 程序员对 IDE 有着近乎虔诚的热爱 造成这一现象有充分的理由 IDE 提供了语法的完整性检查 修正了小错误并提供了增量编译以便更快地完成编码 编译 部署和测试这样的周期 最近几年来 开发环境开始更好地利用编译循环和静态类型提供的信息 IDE 现在编辑抽象语法树(AST) 而不是(或者同时)编辑代码的文本表示 这一策略允许使用强大的代码重构工具 而使用静态类型语言的同样方法来实现此功能则困难得多
静态类型确实能更好地使用工具 但是也存在缺点 强制使用静态类型通常需要编译器 而编译步骤必然会降低生产力 使用 Rails 我可以更改一行代码并重新加载浏览器 就可立即看到更改的结果 与 Java 开发人员相比 大多数 Ruby 开发人员只使用一种很好的编辑器 TextMate 是最流行的 Ruby on Rails 编辑器 它提供了语法突出显示 代码完整性检查 以及一些频繁使用的结构的良好的模板支持 而当发现可将所有简单的基于 Ruby 的脚本(用作基本的 Rails 工具包)放入编辑器中时 您会更加喜出望外 与纯粹的调试器不同的是 我可以使用断点脚本 该脚本可停止特定的应用程序 进入一个 Ruby 解释程序 我可在其中调用方法 检查变量的值 以及甚至在恢复执行之间修改代码
简单的架构
传统的 Web 端 Java 架构包括 一个用于域对象和数据访问对象的层 一个提供业务级 API 的外观层 一个控制器层和一个视图层 此架构比典型的 模型 视图 控制器 架构(使用 Smalltalk 语言最早创建)稍微复杂一些 相比之下 Ruby on Rails 包括一个使用 ActiveRecord 设计模式的模型层 一个控制器层和一个视图层 我们喜欢易于获得的 Rails 方法 它更加简练并且带来额外的复杂性和错误的机会更小
惯例优先原则
Java 框架通常可以自由地使用 XML 配置 而 Rails 主要使用惯例来避免可能的配置 在程序员必须指定配置的位置 Rails 通常依赖 Ruby(常常以 DSL 形式)来提供配置 对于 green field 开发 我发现惯例优先于配置是很有意义的 该策略为我省去了很多行代码 更简化了必须编写的代码 估计我们所需的配置只有传统 Java 应用程序中所指定的十分之一 我们有时会损失一点灵活性 但这并不足以抵消使用此策略带来的节省
总而言之 Rails 框架的原理适合解决 Ch 项目中的问题 集成的各种工具让我可以利用框架实现更多的功能而无需自己进行过多的集成 惯例优先原则 为我节省了配置站点的时间 动态语言为经验丰富的开发人员提供了更多的能力和灵活性 同时也使他们能够利用更少的代码表达更强大的思想 该框架适合于我们团队的能力和要解决的业务问题
持久性
Java 和 Ruby 语言的最流行的持久性框架可以比任何其他特性更好地阐明 Java 和 Ruby 经验之间的区别 Java 开发人员通常使用 Hibernate 它是一种对象关系映射框架 通过 Hibernate 您可获取现有的模型和模式并使用注释或 XML 表达二者之间的映射 Hibernate 类是简单传统 Java 对象(POJO) 它的每个对象派生自一个通用的基类 大多数配置是显式的 使用注释 XML 或二者的某种结合
而 ActiveRecord 是一种包装的框架 就是说每个类都是现有类的包装器 ActiveRecord 根据关联表的内容(如表中每列的一个属性)自动地向模型对象添加特性 所有的类都从一个通用的基类继承 ActiveRecord 主要利用通用约定来推断配置 例如
ActiveRecord 利用类名的复数形式来推出表名 主键的名称为 id 列表的排序顺序由 position 字段决定
对象关系映射是使用遗留模式(可能定义时没有考虑对象模型)时的最佳解决方案 但是当您能为应用程序显式地设计数据库模式时 您通常不需要映射框架了 我们将 ActiveRecord 看作我们的一个巨大优点 我们可以包含关系数据库 需要时转入 SQL 并在适当的时候退出
迁移
Rails 迁移使我们能够用代码表示模式的两个版本之间的差别 和它们所包含的数据之间的差别 对每个迁移都进行了命名和编号 可在任何时候恢复到任何版本 迁移有以下一些确切的优点
产生错误代码时可恢复到一个旧版本的模式 用代码而不是 SQL 来表达模式 更便于我们使用 在最大程度上与数据库独立
但是迁移也有一些限制 如果两个开发人员同时创建迁移 则编号会出现混乱 所以我们必须手动处理 我们通过有效的通信来使这些问题最小化 团队成员构建需使用迁移的新模型时发出通知 但是这个模型依赖于团队的开发人员较少或迁移进展较慢的情况
ActiveRecord 还有其他的限制 其中一些是故意作出的 Rails 的创建者认为 数据库的约束和组成应归入应用程序而不是数据库 这种思想带来了一些副作用 ActiveRecord 使用视图的情况不是很好 构建过程(克隆模式 复制测试数据并运行测试)并不能正确地进行复制 ActiveRecord 在使用参考完整性约束的某些场合也会出现问题 因为某些类型的关联可能连接到多个数据库表 跨越复杂模型进行预先加载很复杂 通常在连接多行时需要使用 SQL 继承也受到限制 使用 ActiveRecord 时 我被迫使用 单表继承 映射策略 而该策略并不总是最佳选择
所有的持久性策略都充满了妥协 我认为 ActiveRecord 实现了一组有效的妥协 常常选择了简单性 总而言之 ActiveRecord 和迁移是我们的积极推动 我们可以快速地构建解决方案 我们拥有足够的 SQL 访问权可在需要时改进系统性能 但是当 ActiveRecord 并不总能应对挑战时 最好将 Rails 应用于使用老旧模式的项目 一些替代的持久性模型正在出现 包括 RBatis 一种 iBATIS Java 框架的端口 现在讨论 RBatis 的有效性还为时过早
结束语
对于我的团队和项目来说 Ruby on Rails 被证明相当有效 我还不知道这个项目的最终规模如何 因为撰写本文时该系统才运行 个月 现在只是开始增加通信量 但是我们对生产力却很了解 我知道团队的预算比竞争公司(这些公司常常使用 Java 解决方案)的要低得多 我对我们的生产力也很有信心
通过 跨越边界 系列 我向您介绍了 Java 领域以外的语言和解决方案 但程序员毕竟是技术人员 每个高明的技术人员的工具包中都应包含适用于每个解决方案的广泛的工具集 除工具外 本系列中介绍的观点也为您展示了一些其他思路 现在一些框架设计者甚至将 Seaside Rails 中的技术甚至 JavaScript 应用于 Java 框架中 找机会进行同样的应用 继续 跨越边界
关于作者
lishixinzhi/Article/program/Java/hx/201311/26713
相关问答
Q1: 关于RUBY编程语言和 JAVA编程语言的问题,学过这两门语言的请进
都能制作大型游戏。怎么样的游戏都能做,就看你的创意和技术到哪个水平。
Q2: Ruby和Java有什么关系么?
在Ruby中,一切皆是对象。
下面举一个例子来更直观地说明Ruby语言ruby生成java代码的这一特点。
在Java中,求一个数的绝对值的代码如下。 int c = Math.abs(-20); 而在Ruby语言中,一切皆是对象,也就是说“-20”这个数也是一个对象,因此,求一个数绝对值的Ruby代码形式如下。 c = -20.abs 这样的代码编写方式是不是更形象一些呢?
Rails 框架是一个更符合实际需要而且更高效的Web开发框架,Rails结合了PHP体系的优点(快速开发)和Java体系的优点(程序规整)。Rails是一个全栈式的MVC框架,换句话说,通过Rails可以实现MVC模式中的各个层次,并使它们无缝地协同运转起来。 在实际开发一个MVC模式的Web应用项目时,如果使用Java开发,需要用到Struts、Hibernate和Spring等框架,而且需要额外整合3个框架开发出的内容。而使用Ruby语言开发相同的项目时,只需要用到Rails框架就可以完成。
RoR的效率肯定要比Java高一个数量级,这确实是事实,比PHP至少也要高好几倍,这也是事实,这一点在这篇文章中不展开了,但是为什么开发效率这么高,ruby生成java代码我也想谈谈我的看法,当然还很不成熟的看法:一、主要原因是ruby语言的语法非常强大我记得庄表伟说过一个观点:“框架是强化的语法”,意思就是说语法比较弱,所以才需要n多框架,如果语法很强,框架就很少。这一点在Java和ruby身上得到了验证。
1、ruby的open class VS Java的AOP,反射、动态代理,字节码增强等技术JDK1.3开始引入反射,就已经打开了Java这种静态类型语言通往动态类型语法的潘多拉魔盒。随后的动态代理技术,字节码增强技术,静态和动态的AOP技术开始层出不穷,为什么呢?就是需要在程序运行期动态改变对象的行为。但是对于ruby来说是open class的,语法级别上就支持程序运行期修改对象行为,所以Java需要很复杂技术才能实现的功能对于ruby来说就是非常简单的搞定了。
2、ruby的duck typing VS Java的IoC,泛型Java的IoC不用说了,泛型在库级别也开始广泛使用。IoC就是根据对象行为来进行对象组装,泛型就是在不确定对象行为的情况下确定对象的交互。但是ruby的对象行为是在运行期才确定的,天然就是泛型的,行为不是静态的,所以不需要IoC。
3、ruby的block,closure VS Java的匿名内部类大家对spring的Template肯定印象很深刻,但是这是ruby标准的用法,所以各种资源释放,异常处理在语法级别上就支持的很好,做起来很简单。
4、ruby的Meta programming VS Java缺乏method_missing机制大家耳熟能详了,Java没有这么强的Meta programming,很多ruby magic耍不出来。
5、脚本语言 VS 编译语言这也是一个很大的优势,脚本编程速度确实快。
二、rails框架确实做的很棒
1、full-stackrails是一个概念一致的fullstack框架,不知道为什么,在Java世界目前只有Rife这一个可以和RoR相提并论的fullstack框架,但是Rife的实现并不好(作者从PHP转过来的,和DHH爆发过口水战)。不过因为底层语法支持的不同,用Java是做不出来RoR框架的。因此也有人用Groovy做Grails,不过这帮人不太争气。
2、CoC这个不用说了,现在很多Java框架开始吸收这一点。
3、为web开发良身打造web开发需要用到各种技术全部提供,绝对的贴心,如果用Java,这些东西都需要自己集成或者自己实现,省了一大堆麻烦事。
4、开发测试部署快速这个不说了,Java劣势太明显了关于“效率提高的来源”问题,我的理解就是次要复杂性被ROR降低到了极致。说的难听一点,不是ROR太聪明,而是我们以前做得蠢事太多了。
各种各样的xml, taglib,单元测试困难 ... ...做过项目的人都知道这些次要复杂性很多情况下真的是要命的。ROR没有降低软件的内在复杂性,也就是业务问题。但是它把复杂性降低到无限趋近于业务复杂性,也有人称ROR是Web开发的DSL。而解决业务问题正是人发挥聪明才智的地方,ROR不能代替人,但是它把人从次要复杂性的泥潭之中解救了出来。
参考资料:南京赛威信息科技
Q3: 关于Ruby
Ruby on Rails是一个用于编写网络应用程序的框架,它基于计算机软件语言Ruby,给程序开发人员提供强大的框架支持。Ruby on Rails包括两部分内容:Ruby语言和Rails框架。
什么是Ruby?
Ruby 语言是一种动态语言,它与Python、Smalltalk和Perl这3种编程语言有些类似。Ruby语言起源于日本,它的研发者是日本人松本行弘(Matsumoto Yukihiro)。松本行弘在1993年开始着手Ruby语言的研发工作,他开发Ruby语言的初衷是为了提高编程的效率。 1995年12月Matz推出了Ruby的第一个版本Ruby 0.95。
Ruby语言的主要特点如下。
1.纯的面向对象语言
在Ruby中,一切皆是对象。下面举一个例子来更直观地说明Ruby语言的这一特点。
在Java中,求一个数的绝对值的代码如下。
int c = Math.abs(-20);
而在Ruby语言中,一切皆是对象,也就是说“-20”这个数也是一个对象,因此,求一个数绝对值的Ruby代码形式如下。
c = -20.abs
这样的代码编写方式是不是更形象一些呢?
2.解释型脚本语言
Ruby 语言是解释型脚本语言,它既有脚本语言强大的字符串处理能力和正则表达式,又不失解释型语言的动态性。一方面,在最初设计Ruby语言时,Ruby的研发者松本行弘考虑到文字处理方面的需要,他借鉴了Perl语言在文字处理方面的成功经验。另一方面,松本行弘将Ruby语言设定为一种解释型语言,Ruby 的动态性使得由Ruby语言编写的程序不需要事先编译即可直接运行,这为程序的调试带来了方便。同时,这一特点可以实现开发过程中的快速反馈。
3.其他特点
(1)动态载入。可以在运行时候重定义自己,类也可以在运行时继承或取消继承。
(2)自动内存管理机制。
(3)多精度整数。
(4)迭代器和闭包。
(5)开源项目。有大量活跃的社区支持Ruby语言。
什么是Rails?
虽然Ruby语言有很多优点,但是一直以来,其流行的范围也仅限于日本。直到2004年,Ruby才逐渐被世界上其他地区的人们所认识,那么是什么让Ruby语言走向世界的呢?是Rails。
Rails 框架首次提出是在2004年7月,它的研发者是26岁的丹麦人David Heinemeier Hansson。不同于已有复杂的Web 开发框架, Rails是一个更符合实际需要而且更高效的Web开发框架。Rails结合了PHP体系的优点(快速开发)和Java体系的优点(程序规整),因此, Rails在其提出后不长的时间里就受到了业内广泛的关注。
Rails框架主要有如下的6大特点。
1.全栈式的MVC框架
Rails是一个全栈式的MVC框架,换句话说,通过Rails可以实现MVC模式中的各个层次,并使它们无缝地协同运转起来。
在实际开发一个MVC模式的Web应用项目时,如果使用Java开发,需要用到Struts(Model层)、Hibernate (Controller 层)和Spring(View层)3个框架,而且需要额外整合3个框架开发出的内容。而使用Ruby语言开发相同的项目时,只需要用到Rails框架就可以完成。
2.约定优于配置
为了说明各个对象之间的关联关系,一般的Web应用开发框架往往采用写入XML配置文件的方法。这种方式虽然可以解决一些问题,但是却带来了管理上的混乱。
Rails 对此的态度是约定优于配置,这意味着在Rails中不会出现XML配置文件。Rails使用Web应用多年来积累的各种常见约定(更具体地说是命名规则)来代替XML配置文件,而在Rails内部的映射与发现机制根据这些约定可以实现对象之间的关联。在第1章中,通过Rails的映射与发现机制实现了数据表与Ruby对象之间的关联。
3.更少的代码
使用约定来代替XML配置文件说明Rails本身完成了大量的底层工作,这意味着使用更少的代码来实现应用程序是极有可能的。此外,代码量的缩减也减小了出现bug的可能性,降低了维护程序和升级程序的难度。
4.生成器
Rails 使用的实时映射技术和元编程技术,免去了开发人员在开发过程中编写大量样板文件代码的烦恼。在少数需要使用样板文件代码的时候,开发人员可以通过 Rails内建的生成器脚本实时创建,而不再是通过手工编写。Rails的这个特点可以使开发人员更专注于系统的逻辑结构,而不必为一些琐碎的细节所烦扰。
5.零周转时间
对已有的Web应用系统进行修改后,其一般需要经过配置、编译、发布、重新设置、测试等一系列步骤才能投入使用,这明显浪费了许多时间。而使用Rails开发Web应用系统,可以通过浏览器即时查看程序运行结果,从而节约了大量的时间。
6.支架系统
Rails的支架系统可以自动为任何相关的数据库表创建一套包含标准CRUD操作和前台视图的系统。通过支架系统,开发人员可以方便快捷地操纵数据库中的数据表。此外,Rails也允许开发人员使用自己设计的代码或视图来替换自动生成的代码和视图。
目前,Rails的最新版本是2005年12月13日发布的v1.0.0。从RoR正式提出到v1.0.0的发布,RoR在一年多的时间里受到了业内人士的广泛关注。RoR受到广泛关注主要有如下两个原因:首先,RoR的开发效率高(部署容易)、功能丰富(支持Ajax等流行应用),有消息称对于相同的 Web开发项目,使用RoR开发比使用Java体系架构开发快5~10倍;此外,令人不可思议的高性能是其受到关注的另一个重要原因,根据CSDN上转载的新闻称使用RoR开发出来的项目性能,比基于Struts+Hibernate+Spring的Java应用还要高15%~20%。
RoR 当前遇到的主要问题是使用RoR搭建的大型商业应用还很少,究其原因可以概括为两点:第一,从开发能力的角度,RoR是一个基于Ruby语言的轻型Web 开发框架,很多开发者对其是否适合大型应用难以把握。第二,本身使用RoR开发的大型商业应用较少,使得后来者持观望态度。
综合分析来看,RoR的发展前景还是很光明的。RoR在短时间内取得了巨大的成就,它打破了Web开发领域的固有观念,方便快捷的开发方式使其被广泛接受。而事实上,现在已有几家跨国公司正在使用RoR开发自己的Web应用程序,并且有多家大型公司在考虑使用RoR进行Web应用开发。
Q4: Java 与Ruby on Rails对接
Ruby 和rail 回归框架
Ruby和 rail是非常简洁的 很容易 很丰富 我无法避免的连续看到以及听到以上这样的说法 比如说 Bill Walton 写的Rail回顾上关于Ruby的文章提到 如果我告诉你当你使用Rail开发一个Web应用程序可以比你使用一种特定的Java框架开发要快至少十倍的时候 你会怎么想?
在尝试了RnR之后 我发现这就是一个伴随旧技术的非常经典的框架
· Ruby是一种非常有力量的语言 就像Smalltalk 我选择静态语言
· 搭建的材料是被动代码生成 就像是IDE wizards或者AppFuse 我选择动态代码生成 或者是更好的——根本就不需要代码生成
· 关系数据库中心 编码发生器和ActiveRecord在表中会被首先想到 然后是在类别中被想到 我选择一种仅仅面向对象的 就像是Hibernate JPA 甚至是ODBMS
· MVC 我正在寻找比旧式MVC框架更新很好的工具
Java的问题 Java开发者
在Java的世界中 生产力是文化问题 而不是技术问题 这就是所谓的这不是Java的错 而是我们的错 我们作为Java开发者需要设计出非常漂亮的体系 以适用于任何地方的GoF模式 使得任何工具都是可再度使用的 把三层架构放到我们所有的系统中以及使用web服务器 我们不是在寻找最直接的方法 所以我们就没办法发现最直接的方法 但是Java 是一种非常简单的语言 使得我们很轻易就可以接近软件开发
Java生产力 其它的方法
解决生产力的一个方法是使用驱动模型 这就是模型环节的开发 仅仅是我们应用程序中的模型环节 就可以使用框架来生产所有的应用程序 MDA OpenXava Trails NakedObjects Roma框架和JMatter都是采用的这种方式
目标
这是所需要应用程序的主要界面
图一
基本上 应用程序推测需要做三件事情
· 列出所有准则的清单
· 创造新准则和编辑现有的准则
· 为某个类别指定合适的准则
Ruby on Rails第一次冲刺
使用RnR的第一步是创建一个新的项目 在命令行你需要输入
$ rails cookbook
现在你必须创建以及配置你的数据库
现在是时间输入你的第一行代码了 在这个例子中使用SQL代码
drop table if exists recipes;
drop table if exists categories;
create table categories (
id int not null auto_increment
name varchar( ) not null default
primary key(id)
) engine=InnoDB;
create table recipes (
id int not null auto_increment
category_id int not null
title varchar( ) not null default
description varchar( ) null
date date null
instructions text null
constraint fk_recipes_categories foreign key
(category_id) references categories(id)
primary key(id)
) engine=InnoDB;
显然你需要在数据库上面执行这些语句
最后的步骤是生成Ruby代码 你只需要执行O S框架的下一个命令
$ ruby script\generate scaffold recipe recipe
$ ruby script\generate scaffold category category
现在 你已经拥有RnR应用程序的第一个版本 并且准备运行
很少量的工作 一个简单的 创建表格 然后执行向导 让我们看看结果
Rails结果
这是应用程序的结果
图二
图三
图四
少量的工作 少量的结果
JPA on OX的第一次冲刺
继续使用OpenXava 使用OpenXava的第一步是创建新的项目
$ ant CreateNewProject xml Dproject=CookBook
现在你必须创建以及配置你的数据库
现在是时间输入你的第一步代码了 在这个例子中使用Java代码
Recipe java:
package okbook model;
import java util *;
import javax persistence *;
import openxava annotations *;
@Entity
@View(members= title; description; date; instructions )
public class Recipe {
@Id @GeneratedValue @Hidden
private Integer id;
@Required @Column(length= )
private String title;
@Column(length= )
private String description;
private Date date;
@Stereotype( HTML_TEXT )
private String instructions;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this description = description;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this date = date;
}
public String getInstructions() {
return instructions;
}
public void setInstructions(String instructions) {
this instructions = instructions;
}
}
Category java:
package okbook model;
import java util *;
import javax persistence *;
import openxava annotations *;
@Entity
public class Category {
@Id @GeneratedValue @Hidden
private Integer id;
@Required @Column(length= )
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this name = name;
}
}
最后一个步骤是生成数据库图表 你只需要执行项目中的一个小目标
$ ant updateSchema
现在 你已经拥有OpenXava应用程序的第一个版本 并且准备运行
少量的工作 简单的POJO 以及执行 更新图表 让我们看看结果
OpenXava结果
这是应用程序的结果
图五
图六
注意 用户可以创建更新 删除 从列表生成PDF 将列表输入到excel 每一列的命令 大型结果和过滤数据的支持分页 而且你可以直接部署 不需要代码 仅仅是执行一个小目标 JSR 入口上的应用程序 以及OpenXava的look feel能够适用于入口的look feel 这就是一个应用程序准备产出的第一步
少量的工作 完美的结果
观察这里RnR 与 OX之间的差别 一个冷静的观点是在RnR中 你先输入表 而在OpenXava中先输入类别
控制器
Rails引起basic CRUD的控制逻辑 你在下面可以看到
图七
另一方面 OX不会为CRUD生成任何代码 OpenXava仅有一个属性代码 可以执行CRUD和打印 将自动化配置给所有的实体 你可以书写你自己的属性CRUD逻辑 或者你可以为一个特有的实体书写详细逻辑 但是你不会为每一个实体设置控制代码 使用这种方法 你需要维护少量的代码 并且你可以改变CRUD独立单元的逻辑
Rails使用合成码 OX使用属性代码
你可以在OpenXava wiki上面学到更多的OX控制器知识
增加关联
为了规范在Ruby中从类别增加关联 你需要在category rb中书写如下代码
图八
以及在recipe rb中
图九
相当简单 但是 你要做更多的工作 你必须编译
cookbook \app\views\recipe\_form r
增加如下代码
plabelfor= recipe_category_id Category/labelbr/
%= select( recipe category_id Category find(:llect{|c| [c name c id] }) %/p:
结果是
图十
在这个环节 OpenXava中 你不得不在Category java中使用JPA规定关联
@ManyToOne(optional=false) @DescriptionsList
private Category category;
and in Recipe java:
@OneToMany(mappedBy= category )
private Collection recipes;
而且你不需要接触任何类似HTML代码 应用程序将会显示如下
图十一
你有一个为修改产生的链接或者从这里创建新类别
不增加任何辅助编码 如果使用者使用类别单元 他将获得每一个类别中准则的收集 如下所示
图十二
在这里 RnR应用程序还是不具备这种特性 你需要书写一些Ruby 和HTML代码来实现一样的结果
在这一块 RnR 和 OX的主要差别是 在OX中你不需要书写任何HTML类似的代码 事实上你连用户界面代码都根本不需要书写
精确的基础资料
Ruby on Rails指导的下一个步骤是为一种特性生成基础资料 在RnR中你不得不编译控制编码从而达到这个目的 让我们开看看
修改以及更新的方法是增加如下代码行
@recipe date = Time now
The equivalent in OX is adding the @DefaultValueCalculator annotation in model:
@DefaultValueCalculator(CurrentDateCalculator class)
private Date date;
用一种更为公开的方法获得一样的结果
在这里 尽管RnR中在控制器上放置的代码 OX中统计基础资料的代码 为了确认以及业务逻辑 一般来说是放在模型上 OX促进从控制器转移业务逻辑到模型上
RnR的相关文章中提到 我改良模型文件 所以我需要重新启动我们的web服务器 尽管使用Eclipse WTP 我只需要按一下Ctrl 加上B 在浏览器上点击刷新以便于看见OpenXava应用程序上面模型的变化
结论
Ruby on Rails 和 OpenXava之间最主要的差别是RnR是 MVC框架 你不得不书写模型和控制器 OX是模型驱动框架 你只需要书写模型 结果就是更少的代码 更好的程序
lishixinzhi/Article/program/Java/JSP/201311/19267
Q5: ruby on rails框架能运行java么
楼主的意思只是能调用java代码么?
如果是这个意思的话,我就可以告诉LZ可以。
有一个gem包叫'rjb'(ruby java bridge),楼主可以百度一下;
但是要装rjb必须系统先装好JDK,否则在安装rjb时会提示错误;
我的是在ubuntu使用的,JDK的安装方法楼主百度一下就知道了。
至于安装gem包,楼主就应该懂的了
ruby生成java代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于ruby encode、ruby生成java代码的信息别忘了在本站进行查找喔。







