写点什么

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

经验之谈

  • 2007-05-16
  • 本文字数:2381 字

    阅读完需:约 8 分钟

你是一位资深的.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 技术团队成员,目前关注垂直搜索引擎领域的应用发展。

2007-05-16 21:302775

评论

发布
暂无评论
发现更多内容

01-自然壁纸实战教程-免费开放啦

万少

HarmonyOS

Coco AI 实战(一):Coco Server Linux 平台部署

极限实验室

CocoAI

中烟创新自研【烟草行政许可文书制作系统】纳入“北京市人工智能赋能行业发展典型案例集”

中烟创新

如何利用YashanDB实现业务数据的高效管理?

数据库砖家

如何利用YashanDB数据库实施数据治理

数据库砖家

Serverless JManus: 企业生产级通用智能体运行时

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

基于华为开发者空间Astro低代码应用平台,构建Deepseek智能助手界面

华为云开发者联盟

华为云ModelArts 华为云Astro DeepSeek v3

Golang基础笔记九之方法与接口

Hunter熊

golang 方法 接口 类型断言

01-自然壁纸实战教程-免费开放啦

万少

鸿蒙 HarmonyOS HarmonyOS NEXT

哈尔滨等保测评:流程、要点

等保测评

AI 英语口语 App 的场景测试

北京木奇移动技术有限公司

软件外包公司 AI英语学习 AI技术应用

如何利用YashanDB数据库实现高可用性设计?

数据库砖家

API 网关在iPaaS集成平台中的功能具体体现

谷云科技RestCloud

安全管理 API API网关 ipaas 网关管理

如何利用YashanDB数据库进行数据监控

数据库砖家

跨平台动漫应用 Ani - 多平台支持的开源项目

qife122

kotlin 动漫

一文读懂 Sigmoid 与 Hard Sigmoid 激活函数:从原理到量化部署

地平线开发者

自动驾驶 算法工具链 地平线征程6

如何利用YashanDB进行高效数据归档管理

数据库砖家

如何利用YashanDB实现跨地域数据同步与灾备部署

数据库砖家

大数据-34 HBase 单节点配置 hbase-env hbase-site xml

武子康

Java 大数据 hadoop 分布式 HBase

RAG评估矩阵全公开:如何科学衡量检索增强系统?

聚客AI学院

人工智能 向量数据库 RAG搭建 RAG应用 RAG 框架

聚焦全球数字经济大会 | 焱融存储推理加速方案成现场焦点

焱融科技

人工智能 数字经济 模型推理 KVCache

如何利用YashanDB数据库加强数据分析能力

数据库砖家

如何利用YashanDB数据库实现分布式事务管理

数据库砖家

从超级个体到超智能企业的一些思考

Abel(不忘初心) 钱小军

放弃Cursor,我依然选择了Claude断供后的Windsurf

王翊仰

剪映和Camtasia Studio哪个更好用 录制微课用什么剪辑简单方便 剪映和Camtasia Studio有什么区别

阿拉灯神丁

屏幕录制 录屏工具 视频编辑 Camtasia Studio2024 视频剪辑软件

如何利用YashanDB进行机器学习模型的构建

数据库砖家

如何利用YashanDB实现数据分片与负载均衡

数据库砖家

Cookie Monster 的秘密配方:Pico CTF 登录机制中的隐藏旗帜

qife122

CTF Cookie分析

如何利用YashanDB实现实时数据处理

数据库砖家

Post-Training on PAI :Ray on PAI,云上一键提交强化学习

阿里云大数据AI技术

人工智能 数据库 模型训练 模型 模型推理

一个.NET程序员为什么学习Ruby on Rails?_.NET_Stephen Chu_InfoQ精选文章