首页 > 解决方案 > 什么时候定义一个静态 ruby​​ 类是个好主意?

问题描述

当定义静态类而不是实例化类有意义时,是否有一些管理规则?

仍然对惯用的 ruby​​ 初始化与静态类定义感到困惑。

从我发现的。

静态类似乎非常有效。

  1. ruby 既是函数式语言又是面向对象的语言。两种风格都可以写。功能风格对于“功能性”事物非常有用。
  2. 我经常观察类从静态到实例化,然后很快膨胀。“现在我们拥有了所有这些东西......为什么不做更多呢?!”。我看到实例化类有一种很自然的倾向,不幸的是承担了不断扩大的责任。
  3. 我看到当一个类从静态转换到实例化时,我们会降低单元测试的信心,因为运行时的事情可能会在内存分配/分配方面发生变化(例如,有人可能会意外地进入实例化和调用之间)。
  4. 我发现静态类更容易阅读,因为我们不必考虑潜在的状态变化。更少的突变=更少的复杂性。

为了我。大问题是:

  1. 类做不止一件事。
  2. 大型旧 ruby​​ 代码库中的模式不稳定。

为了解决这两个问题,我认为静态方法(在可能的情况下)似乎对代码施加了很大的压力,以遵守 SOLID 原则。

静止的

Serializer.transform(fruit:)

实例化

Serializer.new(fruit:).transform

是什么驱使您在 ruby​​ 中保持静态?

标签: rubyruby-on-rails-3staticbackend

解决方案


您所说的是,您只想将类用作纯函数的名称空间。

这没有什么问题,您可以通过这种方式使用 ruby​​,但是您会在很多方面违背语言的本质。这是一个更长的讨论。

另外,我不会将其定义为静态与实例化。您实际上是在询问纯功能与 OO 方法。最后,不要将 OO 等同于“突变”。您可以在 ruby​​ 中使用不可变值对象,我推荐它们。您可能想查看 dry-rb 生态系统,了解一种规范的方法,该方法提倡纯函数概念,这种方法与 ruby​​ 对对象的自然支持相协调。


推荐阅读