構建一個 Ruby Gem 第一章 簡介

weixin_34402408發表於2016-03-27

在我們開始之前先做一下後勤工作……這本書假定你可以舒服的編寫 Ruby 程式碼。如果不是這種情況,不用擔心……有很多書和程式碼可以幫助你。你只要知道,這裡有一些主題會深入一些更復雜的話題比如 Ruby 載入模式和名稱空間。

就我個人而言,通過例子學習是最好的學習方式。我發現的最有價值的書和文章都會在涉及到一個話題後立刻展示真正的程式碼。我會在適當的情況下也這樣做。我也會不留餘力的從流行的 Ruby gems 中對比和高亮程式碼只要這是有意義的。我所希望的是這些 gems 可以給你提供些靈感並且最後展示給你看如何讓你的想法可以被轉化成可以工作的 Ruby gems。

讓我們以這種方式開始吧……

什麼是一個 gem?

一個 Ruby gem 是一個可以複用的打包好的 Ruby 應用程式或者類庫,它專注於特定的功能。Ruby gems 可以做很多事情比如和 Twitter 互動構建 web 應用程式,或者管理後臺任務,等等。

Rubygems.org 是一個被社群認可的 Ruby gems 的託管站點。如果你用 Rails 工作過,你很可能用過 bundle install 命令來安裝在一個 Gemfile 列表中 gems。在大多數情況下,它們是從 Rubygems.org 被下載和安裝的。

對於 Ruby 來說很幸運的是,它的開源社群是強而廣泛的。對於一個普通的應用需要的一個小功能很少會不能找到已有的 gem 去引用。然而,不要因為這種情況阻礙了你構建下一個偉大的 gem。

為什麼構建一個 gem?

拿 Twitter 來舉例……如果我們寫了 3 個不同的應用都需要發一條推文作為一個使用者行為的結果,把那些傳送推文的程式碼寫在 3 個不同的地方是很操蛋的。即使只寫一次然後複製/貼上到每個應用中也是很容易出錯的。提取這些程式碼到一個新的 gem 是一件一勞永逸的事情。用這種方法,我們的應用會得到同一組方法和功能。但是不要擔心,這個 Twitter 的 gem 已經被寫好了,所以我們又少做了一件事!

一種更加複雜的情況牽涉到把一個龐大的應用拆分為微服務(由更小的致力於特定的功能的應用組成)。我們可以考慮這樣做如果我們的應用程式變得龐大並且獨立的元件開始變得越來越複雜。服務的基本原則和管理超出了本書的範圍,但是我想說,還有一些其他理由讓我們從我們的應用程式中提取程式碼到 gems 中。

我寫了關於在我的應用中最流行的 ruby gems,再次看看這個列表, 我從這些 gems 的中得到的好處是巨大的。這是為什麼使用 rails 構建 web 應用能讓你快速迭代一個原因。

根據 Rubygems.org 的資料, 從 2009年7月開始已經有 66,783個 gems 被建立了,一共被下載了幾乎 24 億次。有大量的下載和大量的 gems!開源世界是對於 Ruby gems 和你的 ruby 應用程式都是一個很好的地方。花一些時間來簡化你的應用並且讓其他人能從你的的程式碼中獲益,通過建立一個開源的 Ruby gem。

公開或私有?


我們將要構建的 Ruby gem (作為本書的一部分) 是開源的。然而,正如上面提到的,有些情況下把一個大的應用拆分成小的 gems 是一個好主意,在這種情況下,把這些小的 gem 作為你組織的私有 gem 是完全合理的。Github 使得建立私有程式碼倉庫很簡單所以你的程式碼是被保護的。

(好的)例子是很難的

很難去建立一個不無聊並且有價值的例子。那我們該建立什麼呢?!?!

這本書的第一個部分將會專注於一個簡單的 Ruby gem,它不會比決定檔案結構和載入依賴更有趣。雖然這不會是你見過的最複雜的 ruby 程式碼,但我希望這個例子會足夠用來展示從開始到完成一個 Ruby gem 的構建的必備步驟。

MegaLotto

我們會從一個建立隨機彩票號碼的叫做 MegaLotto 的 gem 開始。

MegaLotto 有兩個特性:

  1. 它返回了一個包含 5 個 integer 的陣列
  2. 陣列的每個元素必須是一個 0 到 60 之間的隨機數(不包含 0 和 60 )

這裡是兩個符合要求的例子:

[23, 22, 3, 7, 16]
[13, 20, 26, 1, 9]

接下來的章節的重點將會是我們構建一個 Ruby gem 的結構和步驟,和有少量 gem 自己的功能。

總結

希望我們現在構建一個 Ruby gem 的原因和我們這樣做能得到的好處是很清楚的。

Stephan Hagemann 在 MountainWest RubyConf 的一個演講叫做 Component-based Architectures in Ruby and Rails。這是我所見過的最好的關於在你已有的應用中提取類庫的演講。Stephan 的演講從為什麼你應該要從一個 Rails 應用程式中提取程式碼到你這樣做會需要的特定方法和步驟都有涉及。我強烈建議你觀看這個視訊如果你從事大型 Rails 應用的開發。

如果和我一樣,你大概已經在想了,『好了,快讓我們看看程式碼!』。你是對的……下一章將會討論一個 gem 的結構然後我們會開始我們的傑作 —— MegaLotto!

相關文章