`
世说新语
  • 浏览: 23637 次
  • 性别: 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则是从另外一个角度思考,找到了另外一种釜底抽薪的甚至是简单的可笑的“手段”——代码少。是啊,代码少当然写得快,当然改的也快,我们咋就没想到呢?

分享到:
评论
89 楼 robbin 2009-06-28  
holan 写道
静态语言与动态语言比较就是程序员在写代码的过程中出差池的几率要小些
对于互联网,应用,ruby绝对比java好,开发快,适应需求快。
但如果在企业级应用,用java肯定比用ruby稳当。

说到企业级应用,请不要鄙视我,不要问我什么是企业应用,如果一定要说
那我只有说,自己遇到的一个企业级应用,乙方是中国最赚钱的企业,项目总额将近一个亿。前端门户有www wap ivr 一堆乱七八糟的渠道。后端webservice SOA。数据量轻松上数亿,oracle,webservice服务器集群,单个服务器都是HP小机。
就这样还时不时撑不住挂掉。请问有谁敢用ruby做这个?

你是老大你敢不敢拍板这个项目用ruby做?

所以也不要把java鄙视得一文不值,问道有先后,术业有专攻而已。
java最大的优势,就是稳。



我咨询过的中国某X全行的票据业务系统,全国所有省下面所有分行所有柜台登录操作这种负载的,够大了吧,也是上亿投资规模,都是HP9000的小型机,也是XX牛公司开发的软件系统,结果怎么样呢?拼SQL的,把数据往HttpSession里面塞的,EJB事务配置错误的,连接池释放不及时的,低级错误一大把。这还仅仅是代码问题,至于部署方面的低级错误照样很多。

刚出道的人就这臭毛病,动不动拿XX公司的名头,xx亿的项目来吓唬人。你也不要拿群集来说事,那些小型机上的WebSphere群集横向+纵向群集都是我配的。小伙子,虚心点,讨论问题就好好讨论。
88 楼 holan 2009-06-26  
night_stalker 写道
holan 写道
挂是因为这一向的快乐女生
晚上的峰值太大
至于架构...是甲方最好的架构师(或者说不是最好,也是顶尖了),至于甲方,是某个经常死人的公司


既然不是架构师的问题,那就是 JEE 的问题了 ……

我都说了是因为快乐女生。以前没发生过这种情况,现在加了服务器,又没有问题了
较劲是没有意思的。
我打住了
87 楼 night_stalker 2009-06-26  
holan 写道
挂是因为这一向的快乐女生
晚上的峰值太大
至于架构...是甲方最好的架构师(或者说不是最好,也是顶尖了),至于甲方,是某个经常死人的公司


既然不是架构师的问题,那就是 JEE 的问题了 ……
86 楼 holan 2009-06-26  
抛开java虚拟机的成熟稳定不说
单单就说动态语言和静态语言的不同。
ruby好是好在用这些动态语言的人,本身水平是应该要高一些的,他们能保证代码的质量
但是如果并不是任何时候都能招到这种程序员,那还是用静态语言来得稳当
如果拿相同水平线的java和ruby程序员来写代码(假设两人水平都不太好),那必定是java代码出问题的几率少,这是肯定的。

如果对用人单位来说,都想用底薪程序员,你说他选择java还是ruby?

effective java泛型那章通篇说的都是类型安全,而不是强调泛型对于减少代码量的好处。就应该知道类型安全有多重要。
动态语言用损失类型安全大大简化了代码,但却损失了bug控制

当然,水平高的程序员能保证代码质量,用ruby那当然舒坦。事实上是,混饭吃的程序员还是占大多数
85 楼 holan 2009-06-26  
fasun 写道
holan 写道
静态语言与动态语言比较就是程序员在写代码的过程中出差池的几率要小些
对于互联网,应用,ruby绝对比java好,开发快,适应需求快。
但如果在企业级应用,用java肯定比用ruby稳当。

说到企业级应用,请不要鄙视我,不要问我什么是企业应用,如果一定要说
那我只有说,自己遇到的一个企业级应用,乙方是中国最赚钱的企业,项目总额将近一个亿。前端门户有www wap ivr 一堆乱七八糟的渠道。后端webservice SOA。数据量轻松上数亿,oracle,webservice服务器集群,单个服务器都是HP小机。
就这样还时不时撑不住挂掉。请问有谁敢用ruby做这个?

你是老大你敢不敢拍板这个项目用ruby做?

所以也不要把java鄙视得一文不值,问道有先后,术业有专攻而已。
java最大的优势,就是稳。



只能说架构做的差。用java做的时不时挂掉 == java稳定(还是最大的优势),真不知道这结论怎么得出来的。

挂是因为这一向的快乐女生
晚上的峰值太大
至于架构...是甲方最好的架构师(或者说不是最好,也是顶尖了),至于甲方,是某个经常死人的公司
84 楼 fasun 2009-06-26  
holan 写道
静态语言与动态语言比较就是程序员在写代码的过程中出差池的几率要小些
对于互联网,应用,ruby绝对比java好,开发快,适应需求快。
但如果在企业级应用,用java肯定比用ruby稳当。

说到企业级应用,请不要鄙视我,不要问我什么是企业应用,如果一定要说
那我只有说,自己遇到的一个企业级应用,乙方是中国最赚钱的企业,项目总额将近一个亿。前端门户有www wap ivr 一堆乱七八糟的渠道。后端webservice SOA。数据量轻松上数亿,oracle,webservice服务器集群,单个服务器都是HP小机。
就这样还时不时撑不住挂掉。请问有谁敢用ruby做这个?

你是老大你敢不敢拍板这个项目用ruby做?

所以也不要把java鄙视得一文不值,问道有先后,术业有专攻而已。
java最大的优势,就是稳。



只能说架构做的差。用java做的时不时挂掉 == java稳定(还是最大的优势),真不知道这结论怎么得出来的。
83 楼 richyzhang 2009-06-26  
holan 写道
静态语言与动态语言比较就是程序员在写代码的过程中出差池的几率要小些
对于互联网,应用,ruby绝对比java好,开发快,适应需求快。
但如果在企业级应用,用java肯定比用ruby稳当。

说到企业级应用,请不要鄙视我,不要问我什么是企业应用,如果一定要说
那我只有说,自己遇到的一个企业级应用,乙方是中国最赚钱的企业,项目总额将近一个亿。前端门户有www wap ivr 一堆乱七八糟的渠道。后端webservice SOA。数据量轻松上数亿,oracle,webservice服务器集群,单个服务器都是HP小机。
就这样还时不时撑不住挂掉。请问有谁敢用ruby做这个?

你是老大你敢不敢拍板这个项目用ruby做?

所以也不要把java鄙视得一文不值,问道有先后,术业有专攻而已。
java最大的优势,就是稳。



这个似乎只能证明java实际上用来做web的效果有多么不好. Php+mysql搞几台hp的pc server也能撑下来的web应用, java servlet一登场, 立马企业化了.
82 楼 holan 2009-06-25  
静态语言与动态语言比较就是程序员在写代码的过程中出差池的几率要小些
对于互联网,应用,ruby绝对比java好,开发快,适应需求快。
但如果在企业级应用,用java肯定比用ruby稳当。

说到企业级应用,请不要鄙视我,不要问我什么是企业应用,如果一定要说
那我只有说,自己遇到的一个企业级应用,乙方是中国最赚钱的企业,项目总额将近一个亿。前端门户有www wap ivr 一堆乱七八糟的渠道。后端webservice SOA。数据量轻松上数亿,oracle,webservice服务器集群,单个服务器都是HP小机。
就这样还时不时撑不住挂掉。请问有谁敢用ruby做这个?

你是老大你敢不敢拍板这个项目用ruby做?

所以也不要把java鄙视得一文不值,问道有先后,术业有专攻而已。
java最大的优势,就是稳。

81 楼 xgene 2009-06-25  
huacnlee 写道
"我觉得java中所谓的业务层中立根本就是个扯淡需求,是一个被过分夸大了的小概率事件!"
这句话对Java的框架设计过度的总结太好了!


在全世界中概率是很小,但是一个公司来说就是全部, 如果牵一发而动全身,那付出的成本就是致命的,如果还有其他选择,决策者绝对会倾向避免出现这种情况,即使它出现的几率小,拿生命去冒险的人毕竟是少数.
80 楼 maodun1978 2009-06-23  
语言本身没啥高低之分
只是个人技术问题而已
79 楼 xujunJ2EE 2009-06-23  
ray_linn 写道
night_stalker 写道
ray_linn 写道

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


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

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

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

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



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

用LINQ
78 楼 下一站,火星 2009-06-23  
ironsabre 写道
night_stalker 写道
ironsabre 写道
我不明白hibernate和rails的active record有什么本质的区别.
一个是基于xml配置的,在xml中配置类与表,类属性与表列的关系,一个是直接基于一种约定,绑定死类与表,类属性与列.
除了这个还有什么?
这点区别很重要吗?


问你个问题:h 可以轻松的做运行时绑定么?

譬如我想让一个类绑定到 A 表,然后在网页上点一个键,就让它绑定到 B 表。

ar 就很简单 ……


能了又如何?


AR的扩展性可不是你所能想象的

    
引用

      def self.included(base) # :nodoc:    
        base.class_eval do
          alias_method :hello, :hello_with_world
        end     
      end  


so what ?
77 楼 night_stalker 2009-06-23  
ironsabre 写道
能了又如何?

你不是比灵活么,这就是 ar 比 h 灵活的例子啊。
什么绑定死了,你不知道 ar 是可以改表改列的么 ……

区别在:配置是死的,ar 的对应关系只是类方法调用。

Coc 无非是设定良好的默认值,但是 Coc 不代表不能改。
76 楼 ironsabre 2009-06-23  
night_stalker 写道
ironsabre 写道
我不明白hibernate和rails的active record有什么本质的区别.
一个是基于xml配置的,在xml中配置类与表,类属性与表列的关系,一个是直接基于一种约定,绑定死类与表,类属性与列.
除了这个还有什么?
这点区别很重要吗?


问你个问题:h 可以轻松的做运行时绑定么?

譬如我想让一个类绑定到 A 表,然后在网页上点一个键,就让它绑定到 B 表。

ar 就很简单 ……


能了又如何?
75 楼 xue98 2009-06-23  
每一门语言都有自己的特点,我们不能用java的思想去想ruby,反之也一样

写的代码是否好维护,在于你所写代码的质量,不于在语言本身

74 楼 night_stalker 2009-06-23  
ironsabre 写道
我不明白hibernate和rails的active record有什么本质的区别.
一个是基于xml配置的,在xml中配置类与表,类属性与表列的关系,一个是直接基于一种约定,绑定死类与表,类属性与列.
除了这个还有什么?
这点区别很重要吗?


问你个问题:h 可以轻松的做运行时绑定么?

譬如我想让一个类绑定到 A 表,然后在网页上点一个键,就让它绑定到 B 表。

ar 就很简单 ……
73 楼 ironsabre 2009-06-23  
我不明白hibernate和rails的active record有什么本质的区别.
一个是基于xml配置的,在xml中配置类与表,类属性与表列的关系,一个是直接基于一种约定,绑定死类与表,类属性与列.
除了这个还有什么?
这点区别很重要吗?
72 楼 night_stalker 2009-06-23  
ray_linn 写道
在一个团队中,是否有代码质量参差的机会更高?


团队越大越参差 …… 所以,还能得出一个大部分情况都成立的规律: 代码越长越参差 ……
71 楼 ray_linn 2009-06-23  
night_stalker 写道
pipilu 写道

    另外,一个设计的很灵活的程序,它会比一个“写死”了的程序,代码量要多出好多,但改的时候,“写死”的那个程序,改起来可谓是伤筋动骨的。而设计灵活的程序,所做的可能仅仅是修改一个配置,或者加几个适配器。这也是代码少并不代表改的快的例子。


本来是横向比较,怎么跑题到纵向比较了 ……

老实说我觉得灵活的 Ruby 太难"写死"了 ……


在一个团队中,是否有代码质量参差的机会更高?
70 楼 night_stalker 2009-06-23  
pipilu 写道

    另外,一个设计的很灵活的程序,它会比一个“写死”了的程序,代码量要多出好多,但改的时候,“写死”的那个程序,改起来可谓是伤筋动骨的。而设计灵活的程序,所做的可能仅仅是修改一个配置,或者加几个适配器。这也是代码少并不代表改的快的例子。


本来是横向比较,怎么跑题到纵向比较了。

老实说我觉得灵活的 Ruby 太难“写死”了,前面已经说过,和动态语言尤其是解释型的 Ruby 比灵活性和松耦合,就是自取其辱 ……

其实你隐含了一个前提,你觉得长的代码做了更多的事情 —— 但是如果长代码和短代码做了同样的事情,又有同样的门面呢? 代码冗长的很大一部分原因在于重复,无谓的大量重复。大量复制粘贴,或者 IDE 给你自动完成,变相复制粘贴。

相关推荐

    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