zoukankan      html  css  js  c++  java
  • 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#!
  • 相关阅读:
    oracle中Blob和Clob类型的区别
    为什么要分库分表
    Enable file editing in Visual Studio's debug mode
    SQL Server Dead Lock Log
    Debug .NET Framework Source
    SQL Server text field里面有换行符的时候copy到excel数据会散乱
    诊断和修复Web测试记录器(Web Test Recorder)问题
    Can't load Microsoft.ReportViewer.ProcessingObjectModel.dll
    'telnet' is not recognized as an internal or external command
    Linq to XML
  • 原文地址:https://www.cnblogs.com/harrysun/p/3041515.html
Copyright © 2011-2022 走看看