导轨设计模式:大量子模型覆盖特定功能



我有一个模型,它将被调用大约 50 次,以使用 rake 任务创建 50 个文件。

大约 90% 的代码可以重用,但我需要重写一些方法。我正在考虑只是从原始表中继承,但这可能会导致大约 40-50 个模型,这感觉不对:

class Dog 
  def bark
     "woof"
  end
end
class Wolf << Dog
  def bark
     "growl"
  end
end

在每个模型中,我可能需要覆盖大约 3-4 种方法。

我的另一个想法是使用这篇文章中的模块 + 扩展 + 超级装饰器:http://robots.thoughtbot.com/post/14825364877/evaluating-alternative-decorator-implementations-in即

class Dog
  def bark
   "woof"
  end
end
module Wolf
  def bark
   "growl"
  end
end
dog = Dog.new
dog.extend(Wolf)
dog.bark   #growl

然后有 50 个模块并在创建时扩展适当的模块。

那么哪个是最好的选择,或者在这种情况下有更好的模式吗?

从你描述依赖关系的方式来看,这听起来像是策略模式的完美情况,而不是子类化或混合。

通过子类化或混合,您将指示特定可能会调用基本方法,并且它可能会扩展基本 API。此外,私有方法应始终被视为潜在的代码异味。如果具体是一个策略对象(例如,带有模块方法的模块),其基础具有实例并调用方法,那么它提供了您实际拥有的依赖项的最清晰的规范。

另请参阅:http://en.wikipedia.org/wiki/Composition_over_inheritance、http://c2.com/cgi/wiki?StrategyPattern

相关内容

  • 没有找到相关文章

最新更新