0
我有与功能X.这个充满轨引擎美孚导轨全引擎使用完整的引擎
我不想再拍引擎,引擎吧,这是几乎相同的,但覆盖funcitonality X,其中y 。 (它基本上是一样的,但少数控制器动作和视图有不同的实现)。
(我会在后面几种安装引擎拆分这一点,但就目前而言,这将是设置: 项目巴兹,利用发动机吧,它使用的发动机美孚)
我想知道是否有任何陷阱。它看起来不像一个经常使用的模式?任何其他人使用这种'某种引擎继承'?
我有与功能X.这个充满轨引擎美孚导轨全引擎使用完整的引擎
我不想再拍引擎,引擎吧,这是几乎相同的,但覆盖funcitonality X,其中y 。 (它基本上是一样的,但少数控制器动作和视图有不同的实现)。
(我会在后面几种安装引擎拆分这一点,但就目前而言,这将是设置: 项目巴兹,利用发动机吧,它使用的发动机美孚)
我想知道是否有任何陷阱。它看起来不像一个经常使用的模式?任何其他人使用这种'某种引擎继承'?
Ruby OpenClassing是你想要做的。例如,
# in Engine Foo
# this code creates functionality x
Foo::SomeRubyClass
# functionality x
def some_method
0.10
end
end
# in Engine Bar
# this code opens and reevaluates the functionality x in Foo Engine
Foo::SomeRubyClass.class_eval do
# functionlity x method
def some_method
0.05
end
end
Rails模型/视图/控制器的更全面的解释。 http://edgeguides.rubyonrails.org/engines.html#overriding-models-and-controllers
谢谢,我忽略了这个简单的解决方案。其结果可能是,我不应该在Foo中给我的文件和Bar中的同名? – SirLenz0rlot
实际上,命名它也是有意义的,所以你可以看到什么是开放分类。开放分类通常被称为“装饰者”模式,因为你正在用新的/不同的功能来装饰一些功能。 – westonplatter
关于装饰模式的更多信息:http://lukeredpath.co.uk/blog/decorator-pattern-with-ruby-in-8-lines.html – westonplatter