`
世说新语
  • 浏览: 23633 次
  • 性别: 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与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 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可...

    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-...

    Ruby on Rails中文指南

    Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在提升开发效率和代码的可读性。Rails以其“约定优于配置”的设计理念,以及“DRY(Don't Repeat ...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    Ruby on Rails实践

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson基于Ruby语言开发的一个开源Web应用程序框架。这个框架遵循“约定优于配置”(Convention over Configuration)的原则,致力于简化Web应用的开发流程,提高...

Global site tag (gtag.js) - Google Analytics