Ruby on Rails專案的救贖

2021-09-17 04:15:56 字數 2606 閱讀 3445

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在多種語言和平台上有著二十年的開發經驗。從2023年開始,他全職轉向rails工作,對於和各種規模的分布式敏捷團隊的協作,以及 和各類專案參與人員(從開發者到專案經理)的合作有著豐富的經驗。他對core rails也是貢獻良多,還是rails文件團隊的成員。此外,在他在lark集團的本職諮詢工作中,是一位在高階rails諮詢領域的合夥人,同時也是railsbridge的創始人之一。

\檢視英文原文:rescuing your ruby on rails projects

專案的總結

現在的專案快到結束了,該總結一下了。先寫下有關這個專案的一些標籤 三個月,乙個專案,還沒有做完,剛畢業,專案老套,技術落 後,同事缺乏交流,老闆不願重視,自己創造力不足,工作缺乏激情,做事條理不明,計畫嚴重滯後。剛畢業,進了一家好像很有前景的小公司,給了乙個 平台專案,從八月到十一月,三個月了,專案...

專案的總結

寫了兩天的課程設計,hibernate和stuts的結合,講一下自己的心得體會。以前這種感覺小,但是隨著慢慢的,這種感覺越來越強烈。乙個專案的實現這幾個步驟必不可少,否則,你的專案會出現你預想不到的問題。定義階段 一 需求分析,在寫專案時,要實現什麼首先要做需求分析,這個太重要了。二 可行性初步計畫...

專案的定義

專案一詞最早於上個世紀50年代在漢語中出現,是指在一定的約束條件下 主要是限定時間 限定資源 具有明確目標的一次性任務。專案是一件事情 一項獨一無二的任務,也可以理解為是在一定的時間和一定的預算內所要達到的預期目的。專案側重於過程,它是乙個動態的概念,例如我們可以把一條高速公路的建設過程視為專案,但...