`
世说新语
  • 浏览: 23388 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

为什么没有java on rails——代码量少才是王道

 
阅读更多

    java web开发的框架很多,但都专注于J2EE分层结构的某一层,比如展示层的struts/jsf;业务层的spring/guice;数据层的 hibernate/ibatis等。J2EE充血模型项目追求业务层的独立,追求框架的低侵入性,在业务层不变的情况下,随便更换数据层或展示层被认为 是灵活性较高的设计,也是很多项目追求的目标。


    但rails则追求完全不同的目标——开发快、代码少。事实上rails的业务代码对 ActiveRecord是高度依赖的,所有业务类都必须显示的继承ActiveRecord::Base类。在这种情况下,维持业务类的框架中立是不可能的。我们没有办法在保持业务类基本不变的情况下改用另外一个ruby写的持久框架。从java的角度看,这是非常愚蠢的行为,是已经被EJB2.0证明了的垃圾实践。

    我觉得java中所谓的业务层中立根本就是个扯淡需求,是一个被过分夸大了的小概率事件。实际项目中几乎没有看到更换持久层框架和展示层框架这种事的(如果真的换也跟重写差不多了),但实际中却有百分之60%甚至更多的项目对这种1%都 不到的小概率需求提供支持。我觉得开发快、应变快是web开发的终极目标,而所谓的业务层中立只是为了实现这一目标的“手段”,而 java的开发现在就是错误的把“手段”当成了“目的”,在追求“手段”完美的过程中迷失了方向。J2EE刚开始以所谓企业级为目标,唯恐摊子铺的不够 大,唯恐不够复杂,拍脑袋居多,严重脱离实践,充满了过度设计,是造成现在这种状况的罪魁祸首。更可恶的是他还限制了我们的思想,在开发中把这一切视为天经地义的,把所有人套在了过度设计当中,即使是天才的Spring/Hibernate也是在J2EE的框架内思考问题。而rails则是从另外一个角度思考,找到了另外一种釜底抽薪的甚至是简单的可笑的“手段”——代码少。是啊,代码少当然写得快,当然改的也快,我们咋就没想到呢?

分享到:
评论
29 楼 下一站,火星 2009-06-19  
rails的邮件系统,只要一行配置代码
引用

ActionMailer::Base.sendmail_settings = {
    :location       => '/usr/sbin/sendmail',
    :arguments      => '-i -t'
}
28 楼 amonlei 2009-06-19  
不是流氓 写道
火星叔叔马丁 写道
不是流氓 写道

rails的维护成本要比java的高很多


你维护过几个rails项目? 和java相比成本高在哪里?
用数据说话 而不是臆想

不是流氓 写道

没有一成不变的系统,也没有一成不变的需求,能快速适应需求才是最好的


很好 还知道快速适应需求 那你说一个10w行代码的系统能快速应变 还是1w行代码的系统更能快速应变


我没维护过rails项目!但是rails的代码要比Java的难读,而且难跟。
rails不成熟的地方很多:rails没有成型的邮件系统,rails的ActiveResorce是吵的很火,功能却不然等等

我也没说Java就是好,也没说rails就是破,拿汉语实现了用户要的东西,一样能拿到钱!就是这个意思。

没有实践就没有发言权,连rails都没维护过,就不要作对比的说。。。
27 楼 pipilu 2009-06-18  
嗨,有用Grails的没?和Ruby on rails比较一下
26 楼 liusong1111 2009-06-18  
花花公子 写道
楼主应该再探讨一下为什么java没有sinatra,pony,rest-client

sinatra我十分喜欢,restful & MVC web framework就应该那个样子。pony是它推荐的发送邮件的库,也很精巧。

night_stalker 写道
现在比较强大的第三方 ORM 有 Sequel,DataMapper …… 还有各种改造版本的 ActiveRecord。

不过 ActiveRecord 历史悠久,名声卓著,很少人用别的 ORM —— 但不说明其它 ORM 比 ActiveRecord 差,相反 ActiveRecord 的很多做法都算比较土的了 ……

专门用途的譬如连接 Kyoto Cabinet 或者 Couch 或者 DataStore 的小小 ORM 更多了。


似乎花花公子对sequel喜爱有加,期待有空给大家分享一下研究成果。

这些orm都支持切换不同类型的数据库,真实项目中不会有多少机会换,切换orm库的可能性更小了。

night_stalker有个小笔误,tokyo cabinet,最近一期《程序员杂志》有一篇文章介绍它了,确实很牛,就是资料太少,而且跟常规RDBMS有距离,需要更多实践上的引导,总之值得关注。tokyo cabinet、couch这种非RDBMS的东西在DM里都有adapter,切换到它们上面理论上说不需要改任何代码,再看看hibernate有这个能力不?


25 楼 ray_linn 2009-06-18  
night_stalker 写道
ray_linn 写道

以前被谣传LTS要被AEF消灭了,不过听说谣传又破了。。。


AEF 是什么? …… 对这方面没什么了解。



ado.net entity framework,感觉上不如activerecord方便。
24 楼 night_stalker 2009-06-18  
ray_linn 写道

以前被谣传LTS要被AEF消灭了,不过听说谣传又破了。。。


AEF 是什么? …… 对这方面没什么了解。
23 楼 liusong1111 2009-06-18  
liusong1111 写道
rails3里的activemodel对几个主流orm又进行了抽象,我想可能是解决我前面提的那种情况,同时实现ruby orm部分功能和基础设施标准化。


更正一下,activemodel目前的功能仅限于把AR的基础设施提取出来,并没有涉及其它orm。
而yehudakatz以前有篇博客,是想用它将各个ruby orm的接口统一化,现在看来有出入。
22 楼 ray_linn 2009-06-18  
night_stalker 写道
ray_linn 写道

新近的ORM代表有啥。。。。俺一直想C# 4.0之后,很有可能为C#其写一个AR,而不需要nhibernate.


Linq to SQL 不是很强么,和 Sequel 挺像的了。或许写一些辅助工具类强化它就很完美了。


以前被谣传LTS要被AEF消灭了,不过听说谣传又破了。。。
21 楼 night_stalker 2009-06-18  
ray_linn 写道

新近的ORM代表有啥。。。。俺一直想C# 4.0之后,很有可能为C#其写一个AR,而不需要nhibernate.


Linq to SQL 不是很强么,和 Sequel 挺像的了。或许写一些辅助工具类强化它就很完美了。
20 楼 liusong1111 2009-06-18  
night_stalker 写道
ray_linn 写道

我想现在即使再出现ruby orm框架,大家也会考虑尽量facade到AR里去,而不是象JDO与Hibernate那样差别巨大。


你这个需求比较奇怪,既要用新 ORM,又不能改代码 ……

正常来说没人会这么想的,大部分人一开始选好框架就不换了。想中途换 ORM 框架的,目的基本都是想要大量重构让代码变得 pp ……

我觉得新框架出现的原因是:这些人对 AR 的写法存在不满 ……

如果不是为了让代码写起来更 pp,我才不把 AR 换掉呢。


正解。

rails的强大不仅仅来自于它自身设计的优美,也来自于ruby提供的能力。由于后者,使得兼容多个orm不需要spring这样的东西。
出于同样的原因,哪个orm更优秀,除了非功能性的考虑(性能、稳定性。。),就是让代码更pp,单纯的facade AR,绝对是错误的想法。而且night_stalker前面说了,AR在ruby orm里其实挺土的。

在rails里把AR换到DM可能存在的问题是,某些UI helper依赖了AR的某些高级特性,而DM与之不兼容,导致这个helper不能用。这不是大问题,大不了不用,我一直主张只用必须的helper。我目前用的就是rails2.3+DM的组合,由于没用它做UI,至今为止没有发现任何问题。

rails3里的activemodel对几个主流orm又进行了抽象,我想可能是解决我前面提的那种情况,同时实现ruby orm部分功能和基础设施标准化。
19 楼 ray_linn 2009-06-18  
night_stalker 写道
ray_linn 写道

我想现在即使再出现ruby orm框架,大家也会考虑尽量facade到AR里去,而不是象JDO与Hibernate那样差别巨大。


你这个需求比较奇怪,既要用新 ORM,又不能改代码 ……

正常来说没人会这么想的,大部分人一开始选好框架就不换了。想中途换 ORM 框架的,目的基本都是想要大量重构让代码变得 pp ……

我觉得新框架出现的原因是:这些人对 AR 的写法存在不满 ……

如果不是为了让代码写起来更 pp,我才不把 AR 换掉呢。



新近的ORM代表有啥。。。。俺一直想C# 4.0之后,很有可能为C#其写一个AR,而不需要nhibernate.
18 楼 night_stalker 2009-06-18  
ray_linn 写道

我想现在即使再出现ruby orm框架,大家也会考虑尽量facade到AR里去,而不是象JDO与Hibernate那样差别巨大。


你这个需求比较奇怪,既要用新 ORM,又不能改代码 ……

正常来说没人会这么想的,大部分人一开始选好框架就不换了。想中途换 ORM 框架的,目的基本都是想要大量重构让代码变得 pp ……

我觉得新框架出现的原因是:这些人对 AR 的写法存在不满 ……

如果不是为了让代码写起来更 pp,我才不把 AR 换掉呢。
17 楼 花花公子 2009-06-18  
楼主应该再探讨一下为什么java没有sinatra,pony,rest-client
16 楼 ray_linn 2009-06-18  
night_stalker 写道
ray_linn 写道

俺想问的在rails里把activerecord改成别的orm是否是很easy捏?当然不是那些脱胎自activerecord的进化版


代码中用到 ActiveRecord 的类,一般都是这样:
class Post < ActiveRecord::Base
  ...
end


换成别的 ORM,就把 < ActiveRecord::Base 去掉,再把载入 ActiveRecord 的 config 选项去掉差不多了 ……
如果是维护代码,某些 CRUD 可能不一样,你可以写个和 AR 相似的 facade module 让它 include,或者就直接往下修改吧。我能想出 n 种方法 …… 甚至 stub 一个 ActiveRecord::Base ……


当然直接弹出个设置窗口让你选择 ORM 框架的方法是没有 ……



right,正解。

我想现在即使再出现ruby orm框架,大家也会考虑尽量facade到AR里去,而不是象JDO与Hibernate那样差别巨大。

15 楼 night_stalker 2009-06-18  
不是流氓 写道

我很想请教下前辈,rails有没有所谓的逻辑层,传说中的业务逻辑写在哪里?controller还是model?
这个没其他意思,因为我是真的遇到这个问题了!


一般写在 model,不满意就新建一个非持久的类。再不爽就新建一个目录名叫 logic,在 config 里 rquire 它就行了 ……

当然弹出一个对话框让你选择“逻辑层”的方法也是没有
14 楼 liusong1111 2009-06-18  
ray_linn 写道

这是因为AR和DM都是rails 3的一部分,如果不是rails的orm呢?

我说的是,java的情况是因为jdo, hibernate,ejb都是独立发展起来的东西,最后不得不用spring来把所有的东西集成起来,这导致最后java web又肥又大。

用rails来批评java web是不厚道的。。。

其他几个回的和我要表达的风马牛不相及


远在rails1.x的时候切换到DM都是这样做的,跟rails3没有半点关系,有一篇07的文章作证:
http://bustoutsolutions.com/blog/2007/09/17/getting-started-with-datamapper-and-rails/
13 楼 ray_linn 2009-06-18  
liusong1111 写道

在rails里把AR换成DM的步骤:
1. 修改environment.rb
# 取消对AR的依赖
config.frameworks -= [:active_record]
# 声明对DM的依赖:
require 'datamapper'
# 加载自己写的model文件,如多个,用Dir.glob循环加载
require 'models/my_model.rb'
...
# 连接数据库
DataMapper.setup(:default, "连接字符串或Hash")


收工。

AR、DM都提供了接近无缝切换数据库的能力,这点跟hibernate差不多。



这是因为AR和DM都是rails 3的一部分,如果不是rails的orm呢?

我说的是,java的情况是因为jdo, hibernate,ejb都是独立发展起来的东西,最后不得不用spring来把所有的东西集成起来,这导致最后java web又肥又大。

用rails来批评java web是不厚道的。。。

理论上java web快捷之道是可以借助大量的代码生成来完成的。。。。(不过我一直觉得很搞笑的是,我的应用才5m大,却带了150多m的框架)
12 楼 night_stalker 2009-06-18  
ray_linn 写道

俺想问的在rails里把activerecord改成别的orm是否是很easy捏?当然不是那些脱胎自activerecord的进化版


代码中用到 ActiveRecord 的类,一般都是这样:
class Post < ActiveRecord::Base
  ...
end


换成别的 ORM,就把 < ActiveRecord::Base 去掉,再把载入 ActiveRecord 的 config 选项去掉差不多了 ……
如果是维护代码,某些 CRUD 可能不一样,你可以写个和 AR 相似的 facade module 让它 include,或者就直接往下修改吧。我能想出 n 种方法 …… 甚至 stub 一个 ActiveRecord::Base ……


当然直接弹出个设置窗口让你选择 ORM 框架的方法是没有 ……
11 楼 liusong1111 2009-06-18  
ray_linn 写道
night_stalker 写道
现在比较强大的第三方 ORM 有 Sequel,DataMapper …… 还有各种改造版本的 ActiveRecord。

不过 ActiveRecord 历史悠久,名声卓著,很少人用别的 ORM —— 但不说明其它 ORM 比 ActiveRecord 差,相反 ActiveRecord 的很多做法都算比较土的了 ……

专门用途的譬如连接 Kyoto Cabinet 或者 Couch 或者 DataStore 的小小 ORM 更多了。



俺想问的在rails里把activerecord改成别的orm是否是很easy捏?当然不是那些脱胎自activerecord的进化版


在rails里把AR换成DM的步骤:
1. 修改environment.rb
# 取消对AR的依赖
config.frameworks -= [:active_record]
# 声明对DM的依赖:
require 'datamapper'
# 加载自己写的model文件,如多个,用Dir.glob循环加载
require 'models/my_model.rb'
...
# 连接数据库
DataMapper.setup(:default, "连接字符串或Hash")


收工。

AR、DM都提供了接近无缝切换数据库的能力,这点跟hibernate差不多。

night_stalker 写道
其实批评者基本都不懂,纯粹来凑热闹。

这种情况持续几年了,这次仍不例外


10 楼 不是流氓 2009-06-18  
火星叔叔马丁 写道
night_stalker 写道
不是流氓 写道

我没维护过rails项目!但是rails的代码要比Java的难读,而且难跟。


其实批评者基本都不懂,纯粹来凑热闹。


嗯 我发现这贴欢乐了 一句话 认真你就输了
我还真输了

我很想请教下前辈,rails有没有所谓的逻辑层,传说中的业务逻辑写在哪里?controller还是model?
这个没其他意思,因为我是真的遇到这个问题了!

相关推荐

    Ruby on Rails入门经典代码

    通过学习和实践压缩包中的"Ruby on Rails入门经典代码",新手不仅可以了解Rails的基本概念,还能掌握实际项目中的应用技巧,逐步成长为一名熟练的Rails开发者。记得不断探索、实践和学习新的Rails知识,以适应不断...

    jRuby On Rails WEB2.0

    《jRuby on Rails WEB2.0》:将Ruby on Rails融入Java平台的实践指南 《jRuby on Rails WEB2.0》是一部由Ola Bini撰写的书籍,深入探讨了如何将Ruby on Rails这一敏捷开源框架与Java平台相结合,以构建高效、灵活的...

    ruby on rails 101

    《Ruby on Rails 101》是一本介绍Ruby on Rails(简称RoR或ROR)的基础书籍,旨在为初学者提供一个全面而深入的学习框架。本书由Peter Marklund编写,包含了五天课程的演示文稿和相关资料,覆盖了从安装到实际应用...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    Ruby on Rails Tutorial

    《Ruby on Rails Tutorial》中文版(原书第2版,涵盖 Rails 4) Ruby 是一门很美的计算机语言,其设计原则就是“让编程人员快乐”。David Heinemeier Hansson 就是看重了这一点,才在开发 Rails 框架时选择了 Ruby...

    Ruby on Rails源代码

    Ruby on Rails(简称Rails)是一种基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性。Rails的哲学强调“约定优于配置”和“Don't Repeat Yourself”(DRY...

    Ruby On Rails中文教材(PDF)

    Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用程序的开发。Rails由David Heinemeier Hansson于2004年创建,它提倡“约定优于配置...

    ruby on rails与MySql的环境配置——支持rails 2.3.5以上版本

    《Ruby on Rails与MySQL环境配置详解》 在开发基于Web的应用程序时,Ruby on Rails(简称Rails)框架和MySQL数据库的结合是常见的选择。本文将详细介绍如何在Windows环境下配置Ruby on Rails以支持Rails 2.3.5及...

    ruby on rails最新版

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。Rails以其“约定优于配置”(Convention over Configuration)...

    Ajax on Rails (PPT)

    ### Ajax on Rails 知识点解析 #### 一、引言 在当今的Web开发领域,Ajax技术已经成为了提升用户体验的重要手段之一。Rails作为一种高效、优雅的Web开发框架,与Ajax技术结合能够创造出功能强大且易于维护的应用...

    Beginning Ruby on rails 源代码

    《初识Ruby on Rails:源代码解析》 Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程,提高开发效率。本资料包包含了...

    ruby_on_rails 源代码上

    Ruby on Rails,简称Rails,是基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性,同时强调“约定优于配置”的原则。Rails的核心理念是“开发应该是一种...

    ruby on rails最佳敏捷开发

    总之,Ruby on Rails通过其简洁的约定、全面的功能以及强大的社区支持,为Web开发提供了一种高效、敏捷的解决方案。尽管Java框架具有广泛的应用和深度,但Rails的出现提醒我们,易用性和生产力也是评价框架价值的...

    提升Ruby on Rails性能的几个解决方案

    Ruby On Rails 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可...

    Ruby on Rails安装包全集(Linux)

    Ruby on Rails是一款基于Ruby语言的开源Web开发框架,它遵循MVC(模型-视图-控制器)架构模式,简化了Web应用的开发流程。在Linux环境下安装Ruby on Rails需要一系列的依赖包和步骤,本资源包提供了所需的所有组件,...

    ruby on rails for dummies

    《Ruby on Rails for Dummies》是一本专门为初学者设计的Ruby on Rails教程,它旨在帮助新手快速理解并掌握这个强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby编程语言构建的一个开源Web应用程序框架,它...

    基于ruby on rails开发示例源码

    Ruby on Rails,简称Rails,是一种基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。本示例源码提供了使用Ruby on Rails进行实际项目开发的具体...

    ruby on rails 3 tutorial.pdf

    《Ruby on Rails 3 Tutorial》是一本专门为初学者设计的指南,旨在帮助读者快速掌握Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby语言的一个开源框架,它采用MVC(Model-View-...

Global site tag (gtag.js) - Google Analytics