跳转到内容
GitHub 仓库 论坛 RSS 新闻提要

幸运 Crystal - 更少的 Bug,更佳的性能,惊人的生产力

Paul Smith

Paul Smith 在一年前创建了 Lucky web 框架 - 现在他与我们分享了它的状态。如果你想分享你自己的项目,联系我们 并分享你的想法。

Lucky 是一个用 Crystal 编写的功能齐全的 web 应用程序框架。使用 Lucky 时,你会编写更少的测试并拥有更少的 bug,因为它具有类型安全的查询、路由和记录保存功能。有了节省的时间,你就可以专注于构建最好的应用程序。

从第 1 周到第 1000 周

当我在大多数框架上开始一个应用程序时,我充满希望。我看到了产品的潜力,并且基于前几周的进展,事情将非常顺利。

几个月过去了……

我对产品的精彩未来充满了希望,变成了希望最新的提交不会破坏任何东西。

我开始更多地关注我的更改可能导致 bug 的方式,而不是如何使应用程序变得更好。我编写并运行测试,希望我已经考虑了所有可能出现问题的地方。 它变得越来越难保持简单和易懂。

Lucky 帮助你专注于构建应用程序

与其花费所有精力担心所有可能无法正常工作的方式,不如让计算机帮忙。毕竟,这是它的工作。

Lucky 的路由处理记录保存查询 都是类型安全的。甚至配置也会在编译时导致失败,因此你可以在升级依赖项时知道自己没有意外地弄乱任何东西。

这使你能够专注于如何通过快速、可靠且价值丰富的 web 应用程序取悦你的客户。

好吧,那么 Lucky 如何捕捉其他框架不会捕捉到的 bug 呢?

类型安全的查询

假设我们想获取所有姓名包含“kat”的用户。以下是如何在 Lucky 中做到这一点

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

在 Lucky 中,你会得到特定于列类型的方法。这意味着像 lowerilike 这样的方法仅适用于 String 列。如果你不小心尝试在整数列上调用 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 会为你捕捉到 bug 并给你一个有用的消息来指导你走向正确的方向

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 的独特之处。快乐编码!