【发布时间】:2012-12-07 00:33:02
【问题描述】:
我有一个独立的 Rails 引擎:Admin。
在那个引擎中,我通过 GUI 创建 Sites。
在引擎中:
module Admin
class Site < ActiveRecord::Base
end
end
在主应用程序中,我从引擎的Site 继承,以便在根级别将其用作常量:
class Site < Admin::Site
end
我这样做是因为在主应用程序的模型、控制器和测试中耦合 Admin::Site 感觉不对。但我猜这种方法有一些缺点,我也猜想有人可能会争辩说耦合是一样的。
我怎样才能以比继承更好的方式委派它?
或
我是否应该重组我的代码并将Site 类放在主应用程序和引擎都可以使用的gem 中?我真正想要的是引擎类的接口,以减少入口点,从而减少耦合。
旁注,我总共有 3-4 个此类驻留在引擎中,但在主应用程序中使用。
编辑:
也许我应该这样包装它:
class Site
def initialize(args = {})
@klass = Admin::Site.new(args)
end
def method_missing(method_name, *args, &block)
@klass.send(method_name, *args, &block)
end
end
当然,那我也可以缩小Site的界面,只在主应用程序中包含我需要的Admin::Site。
【问题讨论】:
标签: ruby-on-rails rails-engines loose-coupling