跳到內容
GitHub 儲存庫 論壇 RSS 新聞來源

使用 Crystal 讓你事半功倍 - 更少的錯誤、更優異的效能、難以置信的生產力

Paul Smith

Paul Smith 在一年前創建了 Lucky 網頁框架 - 而他現在要和我們分享它的狀況。如果您想分享您自己的專案,請 聯繫我們 並告訴我們您的想法。

Lucky 是一個用 Crystal 寫成的功能齊全的 Web 應用程式框架。由於其型別安全的查詢、路由和記錄儲存功能,使用 Lucky 時,您將編寫更少的測試並減少錯誤。有了節省的時間,您就可以專注於建構最好的應用程式。

第一週到第一千週

當我開始使用大多數框架開發應用程式時,我充滿希望。我看到了產品的潛力,並且基於最初幾週的進展,一切都會非常順利。

幾個月過去了...

我對產品美好未來的希望變成了希望最新的提交不會破壞任何東西。

我開始更加關注我的變更可能會如何導致錯誤,而不是如何讓應用程式更好。我編寫並執行測試,希望我已經考慮到所有可能出現的問題。它變得越來越難以保持簡單和易懂。

Lucky 幫助您專注於建構您的應用程式

與其將所有精力都花在擔心所有可能無法運作的方式上,不如讓電腦來幫忙。畢竟,這就是它的工作。

Lucky 的路由處理記錄儲存查詢 都是型別安全的。即使是組態也會在編譯時導致失敗,因此您知道在升級相依性時沒有意外地搞砸任何事情。

這讓您可以專注於如何透過快速、可靠且充滿價值的 Web 應用程式來讓您的客戶感到高興。

好吧,那麼 Lucky 是如何捕捉其他框架無法捕捉到的錯誤的呢?

型別安全的查詢

假設我們想要取得所有名稱包含「kat」的使用者。以下是在 Lucky 中執行此操作的方式

# Will find users with the name "Kathryn", "Katy", etc.
UserQuery.new.name.ilike("kat%")

在 Lucky 中,您將獲得特定於欄位類型的方法。這表示像 lowerilike 這類方法僅適用於字串欄位。如果您不小心嘗試在整數欄位上呼叫 lower,Lucky 會在編譯時通知您。如果您將 name 欄位重新命名為 full_name,Lucky 會在編譯時顯示您也需要進行該變更的所有位置。

如果您嘗試將 nil 傳遞給不允許 nil 的欄位,Lucky 會在編譯時通知您,以便您可以避免可怕的邏輯錯誤和 nil 錯誤。

永遠不用再擔心 HTTP 動詞

Rails 中比較煩人的問題之一是忘記為連結設定正確的 HTTP 方法,即使您的路徑正確也是如此。

以下是刪除註解的範例

link_to "Delete", comment_path(@comment)

您能發現問題嗎?路徑是正確的,但我忘記指定 HTTP 動詞。對於剛接觸 Web 開發或 REST 的團隊成員來說,這尤其令人困惑。

在 Lucky 中,HTTP 動詞會自動用於連結、表單和按鈕。您甚至永遠不必考慮它。它就能正常運作。

自動為您設定正確的動詞 (DELETE)

link "Delete comment", to: Comment::Delete.with(@comment.id)

在動作中捕捉遺失的條件式

假設您的任何動作都有像這樣的條件式

class SamlSignIns::Create < BrowserAction
  action do
    if user.present? && sso_enabled?
      redirect to: SamlSignIns::New
    elsif user.present? && !sso_enabled?
      flash.info = "This email address does not have SSO enabled"
      redirect to: SignIns::New
    end
  end
end

Lucky 會為您捕捉到錯誤,並提供有用的訊息來引導您朝正確的方向前進

SamlSignIns::Create returned Lucky::Response | Nil, but it must return a Lucky::Response.

Try this...

   Make sure to use a method like `render`, `redirect`, or `json` at the end of your action.
   If you are using a conditional, make sure all branches return a Lucky::Response.

在這種情況下,我們忘記新增一個 else 條件,讓使用者知道我們無法找到他們的使用者帳戶。Lucky 非常有用,可以幫助我們朝著這個解決方案邁進。

這只是 Lucky 可以協助您專注於建構最佳應用程式的其中一個範例。查看「為什麼要使用 Lucky?」和「設計 Lucky:堅如磐石的動作和路由」以瞭解更多資訊。

試用 Lucky

我們設計 Lucky 的目的是幫助人們避免常見的陷阱,並讓程式設計在專案的多年後仍然充滿樂趣。如果您對 Lucky 感興趣,請在 Github 上 給我們一個星星查看指南深入瞭解 Lucky 的獨特之處。祝您編碼愉快!