2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

一个.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:302740

评论

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

《Operating System Concepts》阅读笔记:p601-p605

codists

操作系统

实测文心4.5与X1一个月后,我预测文心大模型4.5 Turbo将有这几个升级点

herosunly

#大模型

Databend Cloud 如何给游戏行业数据分析带来 10 倍收益提升?

Databend

RabbitMQ 消息队列幂等性,优先级队列,惰性队列的详细说明

量贩潮汐·WholesaleTide

Rabbit MQ

一文读懂:构建类Arb二层公链,收费模式全解析

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

crossover安装exe后无法打开怎么办?用CrossOver安装成功的软件但打不开怎么办?

阿拉灯神丁

容器 应用程序配置 Mac软件 CrossOver Mac下载

“领导企业转型必修课” 7月12-13日敏捷领导者(CAL1)认证周末班

ShineScrum

敏捷、 CAL

数字先锋 | 云上育才,课堂刮起科技风!

天翼云开发者社区

云电脑

精彩抢先看!博睿数据将亮相GOPS全球运维大会2025深圳站

博睿数据

GOPS全球运维大会 Bonree ONE LLM模型 DeepSeek

Solana链开发全景指南:从环境搭建到生态实践

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

文心4.5Turbo将发布!体验百度文心4.5与X1后,大模型评测:预测新模型能力更强、价格迎新低做开发者延伸的"手和脑"

Yan-英杰

AI 大模型

(下篇)从项目管理到价值管理的转型路径:基于敏捷价值管理办公室(VMO®)的战略升级

ShineScrum

PMO 敏捷、 #项目管理 VMO

怎么用DeepSeek生成系统架构图?DS高阶使用技巧分享!

职场工具箱

架构图 AIGC AI 绘图 架构图工具 DeepSeek

开发一款区块链软件的周期解析

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

MPP 架构解析:原理、核心优势与对比指南

镜舟科技

大数据处理 分布式计算 存算分离 StarRocks MPP 架构

瞧瞧别人家的限流,那叫一个优雅!

不在线第一只蜗牛

Java

AI与5G的融合:如何实现更快速、更智能的物联网应用?

天津汇柏科技有限公司

AI 5G

深入研究:京东商品详情API详解

tbapi

京东API 京东商品数据采集 京东商品详情API 京东数据采集

BeeWorks Meet:私有化视频会议的高效选择

BeeWorks

即时通讯 IM 私有化部署 局域网视频软件

实力认证!天翼云问鼎国产智算云服务市场

天翼云开发者社区

云服务

zk源码—单机和集群通信原理

电子尖叫食人鱼

企业网络升级必备:SD-WAN可以做到这些!

Ogcloud

SD-WAN SD-WAN组网 SD-WAN厂商 sd-wan专线 SD-WAN厂家

e签宝携华为鸿蒙打造全国首个"智能签署江南范式"。

科技汇

什么是微前端?有什么好处?有哪一些方案?

不在线第一只蜗牛

前端

SD-WAN如何突破传统MPLS网络局限?

Ogcloud

SD-WAN SD-WAN组网 SD-WAN厂商 sd-wan专线 SD-WAN厂家

中关村论坛聚焦“AI+新材料”:枫清科技与中化信息、吉林大学共建联合实验室推动产业升级

Fabarta

人工智能 AI+ 大模型 新材料

NocoBase 本周更新汇总:优化执行记录写入逻辑

NocoBase

开源 低代码 零代码 无代码 版本更新

【亲测有效】Tuxera NTFS 2024免费版|激活码|注册码分享 Tuxera for Mac最新破解教程

阿拉灯神丁

激活码生成器 NTFS磁盘管理器 Tuxera NTFS2024 Mac破解软件 磁盘管理工具

BeeWorks:打造安全可控的企业内网即时通讯平台

BeeWorks

即时通讯 IM 私有化部署 企业级应用

什么是日志关联?

运维有小邓

日志管理 日志审计 IT运维管理 日志关联

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