InfoQ

InfoQ

文章

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

一个.NET程序员为什么学习Ruby on Rails?

作者 Stephen Chu 译者 戴强斌 发布于 2007年5月16日

领域
语言 & 开发,
过程 & 实践
主题
Ruby ,
.NET ,
Ruby on Rails ,
变更 ,
动态语言 ,
.NET框架
标签
AJAX ,
模式 ,
Rails

你是一位资深的.NET程序员,而且已经用ASP.NET构建过许多Web应用。

无数个不眠之夜,为了让ASP.NET控件生命周期中的事件驱动模型按你想要的方式执行,你费尽心血,深入细节。

你精通于使用诸如Presentation Model、Model View Presenter这类设计模式对你的应用进行分层,以使其更易测试和维护。

你认为Ruby on Rails只不过是众多被吹嘘的技术中的一员。在它还没有获得可观的市场份额之前,你不会给予它过多的关注。

欢迎来到我的世界。如果你还在读这篇文章,我向你致敬。对于我下面的说法,你可能会充满了好奇。为什么我——一名资深的.NET程序员,在经历了一个月的Ruby on Rails学习后会认为:只有在我了解了Ruby on Rails之后,才能以较少的时间和编码完成以前开发过的许多应用?

老实说,我仍然认为.NET很棒。它为我提供了一个平台,能让我向客户源源不断地提供巨大的商业价值。但我时刻提醒自己:一个简单的问题,有大量不同的方法和技术可以解决它,并且总有一些比其它更好。衷情于某种技术,必然会产生一些无意识的偏见,这最终会阻碍我为客户提供商业价值的能力。例如,对像Ruby这样的动态脚本语言的了解,使我以为:与使用编译型的语言相比,我可以花费更少的时间去编写简单的自动处理的Batch/Shell脚本。

为什么不呢?

下面这几件事,是我(一个.NET程序员)学习Ruby时,发现的一些典型的不同。希望你能喜欢。

不需要编译

Ruby中没有编译的概念。一切都在运行时发生作用。有人认为代码编译可以防止编码时的粗心。那么,你可能应该去看一下测试驱动开发是怎么工作的,连续的代码集成(当然了,不是每天都要构建),单元测试(不涉及数据库和web服务的测试)和依赖注入可以帮助你生成质量良好的代码,使你能够充满自信的灵活的改变你的代码。编译的保障作用一下子变的不那么重要了。

动态增加类的行为——不使用Decorator模式

在静态类型语言中,要想动态增加类的行为,我们可以使用Decorator模式或者模板方法。而在Ruby中,有更多的方法可以在不复杂化对象设计结构的情况下,很简单地做到这一点。这只是因为语言本身对它的支持,例如:将模块作为minxin使用,使用class_eval, instance_eval方法等。事实上,甚至可以通过编程方式在运行时定义类的方法。在静态类型语言中,也可以通过代码生成来完成它。但了解更多的方法,可以让你向一个优秀的问题解决者迈进一步。

译者注:mixin在面向对象编程语言中是一种提供某些功能给子类继承的类,但mixin并不能实例化。从某个mixin继承并不是什么特殊的形式,而它更适于收集功能。某个子类甚至可以通过继承一个或者多个mixin选择继承它的全部或者多数功能。一个mixin能延期到运行时定义和绑定方法,而属性和实例参数也可在编译时才被定义。这不同于我们常见的方式,比如先定义所有的属性、方法,并在编译时进行初始化等。)

通过去除所有的类型声明和接口声明,将代码库“瘦身”10-20%

Ruby是一门动态类型语言。你不需要在使用变量之前声明它的类型,或者为方法签名中的参数定义合适的类型。这意味着你的代码会变得更“瘦”,但这是以代码难于调试和难于进行错误跟踪为代价的,对吗?并非如此,如果你相信单元测试和良好的面向对象设计的概念。如果你的类小而紧凑,类的方法短而精良,并且经过了很好的单元测试,那么调试和错误跟踪将会很简单。

及时Ajax化

Ruby on Rails内置对script.aculo.us库的支持(script.aculo.us是一个Ajax类库,里面包含了大量炫目的Ajax效果,使用这些效果,可以让你的应用更具有交互友好性)。在许多情况下,这相当于在ASP.NET中将一个控件标签拖到html页面上,然后在别的地方(在Rails中,这个地方是控制器)为其编写方法以处理Ajax在服务器端的Web请求。你的Web页面支持Ajax功能,就像Google Suggest的autocomplete或者拖拉排序那样。就这么简单。

使用Rails,不需要专门的O/R映射

使用命名惯例对数据库的表和列以及你的领域模型对象命名,可以让你忘记亲自进行O/R映射的痛苦。Ruby on Rails会为你实现这一切。在最简单的情况下,在视图上增加一个字段并对它进行持久化,你只需要在html中增加一个文本框并在相应的数据库表中增加一个新列,然后你就可以看到,新输入的文字被存储在了数据库新建的列中。真的,就这么简单。

用Ruby脚本构建、部署或发布应用,比使用NAnt更好。

Rake是Ruby on Rails开发中使用的标准构建工具。Rake使用Ruby语法,这意味着在构建和部署不同的应用时,你需要使用Ruby去编写你的构建脚本。作为一门语言,Ruby在以下几个方面尤为出色:处理字符串,文件和目录的创建,高级的正则表达式支持。想一下,有多少次,你需要在批处理和NAnt脚本中执行以下的操作:把服务器A上a目录下所有以.sql为扩展名的文件拷贝到服务器B,然后依次执行这些文件。如果你讨厌批处理脚本在编程方面的限制,或者不喜欢以NAnt中那样的xml格式去编写脚本,你会喜欢Rake的。

不劳无获

学习Ruby的时候,我必须克服许多障碍。首先,我不得不接受这样的事实:与正在使用的“舒适”的技术相比,寻找Ruby的解决方案,要花去我更多的时间。但是,用不了多久,你就会感到喜悦,因为你可以用大量的方式解决不同的问题。其次,学习Ruby/Rails让我受益非浅,通过学以致用,加深了对知识的理解。记住,对于你曾耗费时间学过的东西,要么使用它,要么任其消逝。

查看英文原文:Why Would a .NET Programmer Learn Ruby on Rails?
作者简介:Stephen Chu 是ThoughtWorks的软件开发顾问,同时也是一位经验丰富的.NET开发人员,最近关注于Ruby on Rails。您可以通过他的博客阅读他每天的新看法。

译者简介:戴强斌,拥有三年的Web开发经验,武汉大学Google Camp技术团队成员,目前关注垂直搜索引擎领域的应用发展。

RoR的优点 发表人 Meng Mike 发表于
Re: RoR的优点 发表人 lei snail 发表于
Re: RoR的优点 发表人 钱 峰 发表于
Re: RoR的优点 发表人 chou benk 发表于
不错 发表人 Chen Nikos 发表于
  1. 返回顶部

    RoR的优点

    发表人 Meng Mike

    RoR的优点是找到了做简单事情的简单办法。因此我们怀着欣喜的眼光看着这一聪明人的创造,但是也不要神话它,因为还有很多复杂的事情等着我们去做。.NET和JEE是为解决这些复杂的事情准备的。

  2. 返回顶部

    Re: RoR的优点

    发表人 lei snail

    用什么简单合适就用什么,也不一定非要j2ee/.net。

  3. 返回顶部

    Re: RoR的优点

    发表人 钱 峰

    关键是你想做什么,然后去用什么工具。
    木匠有木匠的手艺,铁匠有铁匠的手艺。

  4. 返回顶部

    不错

    发表人 Chen Nikos

    今天看了一下这方面的书
    感觉开发起来确实很快速
    但是当我们要开发大的项目的时候,或者是一些其它不在Rails范围内东西的话,就有点不适合了

  5. 返回顶部

    Re: RoR的优点

    发表人 chou benk

    简单的方案解决复杂的事情比复杂的方案解决复杂的事情更好.

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。