クラスのコンストラクターのパラメーターが多すぎる場合は、構造体またはビルダー パターンを使用できます。
どちらが良いですか?良い習慣はありますか?
クラスのコンストラクターのパラメーターが多すぎる場合は、構造体またはビルダー パターンを使用できます。
どちらが良いですか?良い習慣はありますか?
ニーズに合った構造のクラスを使用してください。Martin Fowler には、 DataTransferObject (DTO)と呼ばれる同様の手法が 1 つあります。この手法では、複数の呼び出し (おそらくデータベース呼び出し) を使用してデータを取得する代わりにオブジェクト モデルを渡し、コストを削減します。
ビルダー パターンに対する利点:
欠点: オブジェクトは変更可能な状態にあります。
それは、パラメーターが何であるか、それらの相互関係、および必須とオプションの数によって異なります。
複数のパラメーターが関連している場合、通常は、それらのパラメーターを格納する別のクラス (または構造体) を作成することをお勧めします。
たとえば、代わりに
TransferMoney(long srcAccountNumber, int srcAmount, Currency srcCurrency, long destAccountNumber)
src ammount と srcCurrency が関連していることがわかります。新しいクラスを作成して、さまざまな金額のお金を処理し (場合によっては、他の通貨に変換するためのメソッドなどを追加することもできます)、パラメーターの数を減らすことができます。
TransferMoney(long srcAccountNumber, Money amount, long destAccountNumber)
この質問は言語に依存しませんが、デフォルト値をサポートしていない言語 (Java など) を使用している場合は、可能なすべての組み合わせに適合するように、パラメーターの数と型が異なるいくつかのオーバーロードされたメソッドが必要になる場合があります。組み合わせがたくさんある場合は、ビルダーがよりクリーンな方法です。