速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

Ruby on Rails 项目的救赎

  • 2009-07-12
  • 本文字数:1985 字

    阅读完需:约 7 分钟

Ruby on Rails 发布已有五年,在此期间,开发者编写了大量的应用。其中很多应用程序都是开发者们在学习 Ruby 和 Rails 的过程中写就的,代码质量堪虞,却已经运行于生产环境之中。

这些 Web 应用程序的规模数年来不断猛增,由于代码行数不断增加,它们已经变得臃肿,难以维护。这是很多开发者们不得不面对的情况。而且,他们几乎不知道从何下手。

一本新近出版的书能够帮助开发者解决这类问题,这本书叫做 Rails 拯救手册,由 Mike Gunderloy 编写。这本书也同时以 PDF 的形式发布,购买的用户可以终身收到最新版。InfoQ 获得了一个和 Mike 直接对话的机会,试图了解到这本书的核心思想。

Mike 介绍他的新书时说:

Rails 拯救手册是我心血的结晶,当你面对一个乱糟糟的 Rails 应用程序,并且希望把它进行重构(或是仅仅使它能够工作),它能够一步一步指导你如何 去做。这本书介绍了一些简单 Rails 应用程序的共同问题点,并且在战略和战术级别上对如何重构,以及回到高效开发上给出了建议。

这本书面向的读者不是 Ruby on Rails 的新手。Mike 解释了本书的读者群:

本书面向的是正在和陈旧的 Rails 应用程序搏斗,并且需要帮助的开发者。在大部分情况下;一个项目会有第二个开发 者,他会在第一个开发者不能发布可运行代码的时候被加入到这个项目中。有些时候,甚至不会有第二个开发者:一旦你意识到你可能会有问题(或者,很多问 题),没有人能够阻止你重构你的项目。

修正代码问题的关键一环便是知道问题在哪,有些非常明显,但是有些就不是。关于这个问题:

表面上说,Rails 项目中发现问题的数量和客户需求无关。我看到过这些问题是以两种形式。开发者不能够按时发布能 够工作的代码,或者发布的新特性破坏了程序的其他部分。当然,后者是最常见的问题之一:缺乏足够的高质量测试覆盖。当你获得源代码的时候,经常可以在这些 地方发现问题:由于缺乏对数据库层的考虑,不可思议的臃肿的控制器以及充满了 SQL 语句的视图等等导致了低下的性能。

一旦这些问题被找出,那么需要一个结构化的方法来修正它们。Mike 给出了一个开放的结构化的方法:

首先,你需要了解客户的需求,明白哪些修改是必须的。客户需要了解到当开发者试图使程序稳定的时期内,应用程序可能会很少甚至没有新特性。这个过程的一个 关键点在于设置良好的沟通渠道,及时通知客户——经常你需要处理一些不可思议的遗留问题,但是不会满足客户的需求。透明是这个过程中的口号。

在你确认你已经获得了能够继续进行的足够多的支持之后,下一步就是对现存代码做一些巨大的改动(假设这些都不是你写的)。检查 Rails 的版本,将一份拷 贝放到你的桌面(如果可以的话),检查一下路由器以及模型、控制器和视图。仔细查找问题点。通常客户将会知道性能和功能问题出在哪儿;仔细听他们说。

当你已经知道代码中的问题之后,那么着手重构它们。通常重构之后需要进行测试。你需要确认问题已经走上正轨,而且开发过程处于掌控之中。

我们然后讨论了通过选择一些容易完成的目标来达到快速制胜:

书中有一些秘诀,能够轻松为客户带来益处(也能够帮助他们成为反馈式的开发者)。例如,花费在理解数据模型和寻找模式的时间能够帮助你寻找到如何得到本质的性能提升。

也有一些地方需要注意,他介绍了一些入手点:

此外如果需要关注数据库层(尤其是在开发者的第一个或者第二个 Rails 项目),通过运行 Google Page Speed 类似的工具能够知道那些地方存在性能瓶颈(性能问题是客户最关心的问题之一)。在一个公共站点,确保有一些异常通知来告诉你哪些东西失败了,是 另外一个能够知道代码的哪些部分需要特别关注的方法。

当被问道他在 Ruby 社区的背景以及他如何意识到这些常见问题的类型的时候,Mike 指出他多年的咨询经验以及学习帮助了他:

在过去两年中,我已经帮助了大量的项目转到正轨来,但是为了客户的信心,我不能透露他们的名字。我也曾经在做 Action Rails 的 时候,做过一些代码检查。这些项目有些只是一些简单站点,基于 10 个左右模型,但是这些模型缺少了一些基本的 Rails 功能,例如模型关联(因此编写了太 多自定义代码),有些却是大型应用程序,已经被部署用作主要的功能实现,但是却被 Bug 缠身。我花费了很多时间在客户的项目以及转包合同,而不是在产品或 者临时工作中,这些并没有给我太多机会来审视它们为什么失败。

更多信息可以在 Rails 拯救手册的官方站点上找到。

Mike Gunderloy 在多种语言和平台上有着二十年的开发经验。从 2006 年开始,他全职转向 Rails 工作,对于和各种规模的分布式敏捷团队的协作,以及 和各类项目参与人员(从开发者到项目经理)的合作有着丰富的经验。他对 core Rails 也是贡献良多,还是 Rails 文档团队的成员。此外,在他在 Lark 集团的本职咨询工作中,是一位在高端 Rails 咨询领域的合伙人,同时也是 RailsBridge 的创始人之一。

查看英文原文: Rescuing Your Ruby on Rails Projects

2009-07-12 12:402844
用户头像

发布了 90 篇内容, 共 34.4 次阅读, 收获喜欢 5 次。

关注

评论

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

Git将单个文件合并到指定分支教程。

百度搜索:蓝易云

git 云计算 Linux 运维 云服务器

软件测试/测试开发丨从原理到实战,四天带你轻松进阶Python

测试人

软件测试

在智能制造中使用数字孪生的优势

3D建模设计

3D数字孪生 3D数字孪生场景编辑器 3D场布工具 3D场景搭建

解读 | Mint Blockchain 为何选择 OP Stack 作为 L2 技术方案?

NFT Research

blockchain NFT\ Layer 2

macOS 14 Sonoma(最新MacOS系统) pkg完整安装包 14.2正式版

南屿

苹果系统下载 macOS 14 Sonoma

通过智能钱包监控降低加密交易费用

Footprint Analytics

区块链 加密货币

让数据同步纵享丝滑,ETLCloud安装指南

RestCloud

ETL

Scrapy框架之Docker安装MongoDB教程。

百度搜索:蓝易云

mongodb Docker Linux Scrapy 云服务器

详述 IntelliJ IDEA 遇到 java -source 1.3 中不支持某某操作的解决方法

南屿

IntelliJ IDEA IntelliJ IDEA 2023最新 IntelliJ IDEA密钥

什么是制造业中的数字孪生?

3D建模设计

3D场景应用 3D场景建模 3D数字孪生场景编辑器 3D场布工具

软件测试/测试开发丨软件测试基础概念 学习笔记

测试人

软件测试 测试开发

使用 Parallels Desktop 彻底改变您的开发和测试工作流程

南屿

Mac虚拟机 Parallels Desktop 18破解 Parallels Desktop 19

自有APP内怎么实现小程序连麦直播

Geek_2305a8

软件开发

Geek_8da502

CopyQueue for mac(管理文件传输工具) v3.1永久激活版

mac

苹果mac Windows软件 CopyQueue 管理文件传输工具

iOS应用如何签名?使用xcode签名的办法和工具 附xcode14下载安装包

南屿

Xcode Mac版 应用签名 Xcode签名

云组态是什么?云组态软件特点及应用

2D3D前端可视化开发

物联网 可视化 组态软件 工业自动化 云组态

Beyond Compare4 for Mac怎么使用?Beyond Compare功能特点详解

南屿

Mac软件 Beyond Compare 4 注册版 Beyond Compare注册码 文件夹比较工具

Allins 官网正式上线,铭文赛道进入 AMM 交易时代

大瞿科技

【第七在线】时尚鞋服企业商品运营如何实现智能化?

第七在线

数字孪生开发:基础知识、类型、优势和成本

3D建模设计

3D数字孪生场景编辑器 3D场布工具 3D场景搭建

SVN客户端 smartsvn mac破解版 附许可文件 兼容M/intel

南屿

svn Mac软件 SmartSVN mac破解版 SmartSVN下载

SD-WAN组网方式详解

Ogcloud

网络 SD-WAN 组网 组网网络

引领功能型对话大模型的部署实践革新

百度开发者中心

人工智能 nlp ChatGPT

简单两步,轻松卸载AlDente Pro,来围观~~

南屿

AlDente Pro破解版 AlDente Pro mac mac电池保护 AlDente Pro卸载 苹果电池助手

智能工厂:为制造业的数字化转型奠定基础

3D建模设计

3D场景建模 3D数字孪生场景编辑器 3D场布工具

Meta推出大模型开源项目Llama 2

百度开发者中心

人工智能 大模型 LLM

小程序如何帮助在线教育打造业务新引擎

Geek_2305a8

微店商品详情数据接口(micro.item_get)丨微店API接口

tbapi

微店API接口 微店商品详情API接口 微店商品数据接口

Ruby on Rails项目的救赎_Ruby_Robert Bazinet_InfoQ精选文章