1

将一个类分解为多个文件的首选方法是什么?Mixins 可以工作,但就我而言,我只是想更好地组织一个非常大的班级。在下面介绍的两种方法中,其中一种是否比另一种“更好”?

文件_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
4

1 回答 1

2

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

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

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

于 2015-09-16T20:05:56.607 回答