将课程分成多个文件的首选方法是什么? 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
答案 0 :(得分:2)
您的支持方法是否足够通用,以至于它们可能对其他完全不相关的类有用?如果是这样,mixin是执行此操作的正确方法,因为它可以让您轻松地重用支持代码。
但是,如果您的支持方法非常特定于ReallyBigClass,并且如果包含在其他地方则不太可行,那么重新打开该类是可行的方法。使用mixin可能会给出这些方法比实际更通用的外观,实际上它们应该只用于特定类的实例。
话虽这么说,我认为你的问题表明一个更大的设计问题。如果您处于前一种情况(一般方法),则应首先设计更多通用模块以避免紧密耦合。一个名为ReallyBigClassFileB
的模块散发出一些强烈的代码味道。在后一种情况下(非常具体的方法)如果你的类太大以至于它的文件难以管理,你可能需要重构一些东西。也许你的班级负责太多了?也许它可以使用一些子类(在单独的文件中有意义)?