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

时间:2015-09-16 19:55:27

标签: ruby ruby-2.2

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

file_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

file_B_class.rb

class ReallyBigClass

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

end

file_B_mixin.rb

 module ReallyBigClassFileB

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

1 个答案:

答案 0 :(得分:2)

您的支持方法是否足够通用,以至于它们可能对其他完全不相关的类有用?如果是这样,mixin是执行此操作的正确方法,因为它可以让您轻松地重用支持代码。

但是,如果您的支持方法非常特定于ReallyBigClass,并且如果包含在其他地方则不太可行,那么重新打开该类是可行的方法。使用mixin可能会给出这些方法比实际更通用的外观,实际上它们应该只用于特定类的实例。

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