いくつかの異なる方法でクライアントに請求する請求書モデルがあります。簡潔にするために、インプレッションあたりのコストと電話問い合わせあたりのコストの 2 つに焦点を当てます。私の考えは、これら (およびその他) を戦略として実装し、それらを請求書クラスに動的に混合することでした。
インプレッション/コールの数を決定するために使用されるさまざまな情報源があるため、これは適切と思われます。Invoice
これは、基本的な式をクラスに保持しながら、戦略にカプセル化できます。
インプレッション単価の計算は簡単ですnum impressions X cost per impression
。
電話での問い合わせの計算はもう少し複雑ですnum calls X cost per call
。
class Invoice
def self.strategy
self.class_eval <<-EOS
include #{billing_type}
EOS
end
def invoice_amount
# this will used the module mixed in above
self.rate * calculate_impressions
end
end
次に、モジュールは次のようになります。
module PerImpressionCalculation
def calculate_impressions
# get the number of impessions from source a...
end
end
module PerInquiryCalcuation
def calculate_impressions
# get the number of impessions from source b...
end
end
ただし、通話がカウントされるかどうかは通話の長さに基づいており、これはモデルによって異なります。したがって、電話ログを検索するときは、この値が必要です。
私の質問は、この値はどこに保存されるのですか? 10 秒の呼び出しに基づく請求書の戦略と、30 秒の呼び出しに基づく別の戦略を作成することはできますが、それは無駄に思えます。しきい値を 15 秒にするという取引が成立した場合、新しい戦略を作成する必要があります。この問題を解決するための最良の設計選択は何ですか?