首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails设计模式:覆盖特定功能的大量子模型

Rails设计模式:覆盖特定功能的大量子模型
EN

Stack Overflow用户
提问于 2012-05-31 12:09:11
回答 1查看 203关注 0票数 1

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

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

代码语言:javascript
复制
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,即。

代码语言:javascript
复制
class Dog
  def bark
   "woof"
  end
end

module Wolf
  def bark
   "growl"
  end
end

dog = Dog.new
dog.extend(Wolf)
dog.bark   #growl

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-01 09:37:32

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10827323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档