Ruby and Rails

      前段日子看完了一本《松本行弘的程序世界》,同时在网上检索了一下松本行弘本人,对这位业内前辈佩服得五体投地。既佩服其起对程序的狂热和以及对事业认真负责的态度,又佩服其淡泊名利、秉承开源的精神。

      很自然的,我怀着崇敬的心情,开始了Ruby之旅。

      首先,学的是Ruby语法本身,我被其优雅的语法迷住了,其语法更接近自然语言。我被块表达式迷住了,像数学公式一样简明。

例如:

def initialize(title, price_code)

    @title, @price_code = title, price_code

end

命名约定造就了简洁与优雅。  唯一构造函数,避免了C++中构造函数导致的一系列问题(operator=, default constrution, copy construction)。

[[1,2],[3,4]].each do |a,b|

    p [a,b]

end

块表达式优雅,简洁,自然。

      我被开放类和猴子补丁给震撼了。 对一个习惯了强类型语言思维的人来说,第一感觉就是太危险了吧。一颗老鼠屎,真的可以坏一锅汤。在一个不起眼的角落,用一下开放类或者猴子补丁,整个后台程序的意义完全改变。

      同时,Ruby给了程序员更大的自由,比ASP.NET中的自动生成的partial 类强大多了。

      开放类也给了程序员更大的掌控能力。我不禁想到了J2EE的Spring框架,这个框架有两大功能:Bean 工厂和 面向切面编程,而以面向切面编程为甚(AspectJ)。而此时,我发现Ruby的开放类原生态支持面向切面编程。

比如:application()方法是为了完成某一特定功能,现在我需要给application加一个入口日志beforeLog()和出口日志afterLog()。

我只需要:

tmp = application;

application()

{

    beforeLog();

    tmp();

    afterLog();

}

这种方式比Spring使用反射方式实现的切面编程直观简单得多。Spring配置方式作用原理 不禁让我想起了C++的模版,以及其导致的代码膨胀情景。

我们教研室另一拨人改造Java实现GOP,据说是软件进化编程的一种。我不禁想Ruby是不是更适合做这个。

      然后,学习了一下Rails。

      久闻Rails大名。盛名之下,其实几何。亲自一看才知道。我用我熟悉的J2EE与Rails对比学习。

      J2EE是一个严谨的语言或者框架。同时它可以它可以给程序员一定的自由度和较大的参与度。

      说到这里,我不禁讨厌起ASP.NET,讨厌起微软的一些技术。因为我一直认为微软的产品的宗旨是将用户傻瓜化。比如:Windows与Linux相比,比如ASP.NET与J2EE相比。前者向用户隐藏了太多细节,比如MFC,比如ASP.NET。对于非专业用户这样很好,但是对于程序员,这可是毒药。当初刚学WEB编程时,我发现在ASP.NET2.0上面,你不需要懂HTML,不需要懂SQL,甚至在不懂客户端控件和服务器端控件区别的条件下 可以用 鼠标拖出了一个美观,功能完整的网站。当时,我就吓坏了。

      之后做完本科毕设之后就果断转向J2EE了。

      言归正传,转向Rails与J2EE比较。

      第一:Rails的惯例优先原则太牛了,省掉了海量的配置文件。想想Hibernate中大量的映射文件,想想Struts下的配置文件,以及Spring配置文件造成的多少头疼问题,尤其项目扩展时需要更新大量配置文件该有多头疼。

      其次:rails原生就是依据MVC模式组织的,这样就从根本上规范了项目的架构。

      Model功能上基本与Hibernate对应。但是,rails的Model是build-in的,比Hibernate这个第三方组建更轻量级,更契合。不过Hibernate支持双向映射,表结构<->JavaBean,不知道Rails是否支持从表结构到Model对象的映射。不过还是Java语法严谨,给人心底踏实的感觉。

      Control功能上与Struts2对应。同样,rails的Control是build-in的,而Struts是第三方组件。但是rails的内置的简洁url确实令我大吃一惊。

例如:rails原生态支持  http://domain.com/show/1  这种简洁url。其中show就是Control中的方法。在J2EE中要实现这个,估计又要寻找第三方组件了。

      rails的View原生支持AJAX,比J2EE使用第三方库DWR方便多了。

      rails的单元测试很强大,竟然可以做登录测试,超出我意料之外。可能是ruby本身是弱类型,所以其安全性强烈依赖与测试,所以测试功能必须完备,测试必须严谨。而Java对测试要求没这么严格。

      J2EE的学习曲线真长。先要学习Java,然后学习JSP+Servlet,然后学习3大框架Hibernate+Struts+Spring, 还需要学习AJAX(JQuery,  DWR等)。尤其在没有人指导情况下学习,学习曲线更长。比如,学完JSP+Servlet之后,根本不知道自己要学习后面的框架,即使想学,也难以下手。

      而学习Ruby + Rails,你会发现这真是一条坦途。一条直路走到底,阅尽一切。岂不畅快淋漓。

       

      夜半随笔,直抒胸臆!

                                                                                                                                                             Stan Sun

                                                                                                                                                              2013-4-24晚

!#Never too late to do it now#!
原文地址:https://www.cnblogs.com/harrysun/p/3041515.html