2

多くの引数をメソッドに渡す代わりに、引数オブジェクトにカプセル化していました。パラメータオブジェクトの通常のクラスまたはInnerクラスを作成しますか?

ノート:そのような場合のためにデモ
alt text

ため簡体、何がより良い練習だろうか?

•クラスを作成し、InventorySaveArgsとしてそれは?
- または -
•ネストされたクラスを作成し、それSaveArgsとして?

また、なぜあなたはどちらか一方を選択する理由を説明しますか?

[編集]:その引数型は、別のアセンブリでも使用されます。

質問:複数のパラメータを1つのオブジェクトに偶然にカプセル化するためのパターン名がある場合、ちょっと不思議です。

[UPDATE]Found Nested Type Usage GuidelinesInventorySaveArgs
MSDNには、別のアセンブリから利用可能であるべきであるので、私は通常のクラスでつもりです。

答えて

1

IIRC .NETのデザインガイドラインは、この点でかなり明確です。パブリックネストされたタイプは存在しません。

+0

正しくありません。パブリックネストされた型は避けるべきですが、それらを使用する正当な理由があることがあります。http://msdn.microsoft.com/lv-lv/library/ms229027(en-us).aspx –

+0

大丈夫、非常にまれですそのルールの例外ですが、ここでは適用されません。 –

+0

例外のCLRの例については、6つのネストされたパブリックコレクション型を持つWinForms ListViewを参照してください。 ListViewで使用されるため、入れ子になっています。他のWinFormsコントロールにも同様の入れ子型があります。 –

1

他のタイプのタイプを使用できるようにしたい場合に備えて、私はそれをInventorySaveArgsと名付けます。最初からInventorySaveArgsという名前を付けると、リファクタリングが必要な場合は、すべてのコンテキストで意味のある名前になります。

1

私は最初のクラスを選択し、外部クラスを作成してInventorySaveArgsという名前を付けます。特定のクラスがパブリックメソッドで使用されている場合、そのクラスの外にクラスを含めないという唯一の引数は名前空間の汚染です。

内部クラスを持つことは、クラス名の前に常に型名の接頭辞を付ける必要があるため、C#ではかなり厄介です。前述したように、いったん公開されると、名前空間の汚染が減少します。しかし、ネームスペースが大きすぎてInventorySaveArgsクラスが大きすぎる場合は、おそらくネームスペースを分割する必要があります。

1

私が今まで聞いた単一のオブジェクトに複数のパラメータをカプセル化するためのパターンのみがrefactoring pattern detailed by Martin Fowler

+0

+1:どのような適切な名前のパターン..パラメータオブジェクト..誰が推測しただろう!ありがとう – Sung

関連する問題