分離された Rails Engine があります: Admin
.
そのエンジンではSites
、GUI を使用して作成します。
エンジン内:
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
メイン アプリに含めることもできます。