通过mixin或普通定义将Ruby类分解为单独的文件?

通过mixin或普通定义将Ruby类分解为单独的文件?,ruby,ruby-2.2,Ruby,Ruby 2.2,将一个类拆分为多个文件的首选方法是什么?混合可以工作,但在我的情况下,我只是想更好地组织一个非常大的类。下面介绍的两种方法中,有一种比另一种“更好”吗 文件A.rb require 'file_B_class' require 'file_B_mixin' class ReallyBigClass include ReallyBigClassFileB def primary_method puts "I'm the primary method" end end 文

将一个类拆分为多个文件的首选方法是什么?混合可以工作,但在我的情况下,我只是想更好地组织一个非常大的类。下面介绍的两种方法中,有一种比另一种“更好”吗

文件A.rb

require 'file_B_class'
require 'file_B_mixin'

class ReallyBigClass
  include ReallyBigClassFileB

   def primary_method
    puts "I'm the primary method"
  end
end
文件_B_class.rb

class ReallyBigClass

  def support_method_as_class
    puts "I'm included in the main class by appending code"
  end

end
文件_B_mixin.rb

 module ReallyBigClassFileB

  def support_method_as_mixin
    puts "I'm included in the main class by mixin"
  end
end

您的支持方法是否足够通用,可以用于其他完全不相关的类?如果是这样,mixin是实现这一点的正确方法,因为它可以让您轻松地重用支持代码

但是,如果您的支持方法非常特定于ReallyBigClass,并且如果包含在其他地方,则不太可能工作,那么重新打开该类是一种方法。在那里使用mixin可能会使方法看起来比实际更通用,而实际上它们应该只用于特定类的实例


话虽如此,我认为你的问题表明了一个更大的设计问题。如果是前一种情况(通用方法),那么首先应该设计更通用的模块,以避免紧密耦合。名为
ReallyBigClassFileB
的模块发出强烈的代码气味。在后一种情况下(非常具体的方法),如果您的类太大,以至于其文件太大,您可能需要重构一些东西。也许是你们班的人太多了?也许它可以使用一些子类(在单独的文件中有意义)?

像这样破坏一个类不会解决任何问题。这只会让问题变得更糟,因为@max说,你的类做得太多了。将它的一些职责提取到集中的、较小的、可管理的类中。感谢您的回复。支持方法是特定于该类的,不应重复使用,因此我将继续重新打开该类。在这个特殊的例子中,这个类还不是太大,但是出于美学的考虑,我正在考虑按类别组织它的方法。