メソッドインターフェイスの2つの相反する戦略をよく目にしますが、大まかに次のように要約します。
// Form 1: Pass in an object.
double calculateTaxesOwed(TaxForm f) { ... }
// Form 2: Pass in the fields you'll use.
double calculateTaxesOwed(double taxRate, double income) { ... }
// use of form 1:
TaxForm f = ...
double payment = calculateTaxesOwed(f);
// use of form 2:
TaxForm f = ...
double payment = calculateTaxesOwed(f.getTaxRate(), f.getIncome());
特に、どのフィールドが使用されているかを評価するのが難しい動的言語では、2番目の形式の支持者を見てきました。
ただし、最初の形式の方がはるかに好きです。短く、エラーの余地が少なく、後でオブジェクトの定義が変更された場合でも、メソッドシグネチャを更新する必要はなく、おそらく、オブジェクト内でのオブジェクトの操作方法を変更するだけです。方法。
どちらの形式にも説得力のある一般的なケースはありますか?最初のフォームよりも2番目のフォームを使用する必要がある場合の明確な例はありますか?あるフォームを他のフォームよりも使用するという私の決定を正当化するために指摘できるSOLIDまたは他のOOPの原則はありますか?動的言語を使用している場合、上記の回答のいずれかが変わりますか?