AccountクラスとAccountReportクラスがあるとしましょう。account#showで、アカウントのレポートを表示したいと思います。AccountとAccountReportの両方に、いくつかのパブリックメソッドがあります。次のテクニックのどれが良いですか?
1)アカウントとAccountReportをインスタンス化し、アカウントデータを使用してAccountReportを初期化します。
class AccountsController < ActionController::Base
def show
@account = current_user.account
@account_report = AccountReport.new(@account.orders)
respond_with(@account)
end
# ...
end
2)AccountのインスタンスがAccountReportをインスタンス化し、メソッド呼び出しを委任できるようにします
class Account < ActiveRecord::Base
attr_reader :account_report
delegate :method_a, :method_b, :method_c, :method_d, :to => :account_report
after_initialize :setup_account_report
def setup_account_report
@account_report = AccountReport.new(orders)
end
# ...
end
オプション2は私にとってよりクリーンなアプローチのようですが、アカウントに多くのメソッドをロードすると、神のクラスのように感じられます。