OOP設計:オブジェクト固有の「比較」メソッドをどこに配置しますか?
-
28-09-2019 - |
質問
テストコレクションオブジェクトに保存された一連のテスト実行からいくつかの測定オブジェクトインスタンスがあります。また、2つのテスト結果オブジェクトインスタンスを比較し、それらが「十分に近い」かどうかを教えてくれるいくつかのロジックがあります。
このロジックはどこに配置すべきですか?
- メソッドとしてのオブジェクトについて?好き:
instance.approximately_equal(other)
- クラス/静的メソッドとしてのオブジェクトのクラスで?
class.approximately_equal(a,b)
- メソッドとしてのコレクションオブジェクトについて?
collection.approximately_equal(a,b)
これの正しいOOデザインは何ですか?
(#1は正しい解決策と思われるので、あるインスタンスが別のインスタンスに対してほぼequalであるかどうかを尋ねることは決してありません。「オブジェクトのグループ」が互いに等しい場合のみです。 ..)
ありがとう
解決
私が読んだオブジェクト指向のデザインの本は、クロスクラスの機能をサービスプロバイダーオブジェクトに配置することをお勧めします。これにより、2つのオブジェクトが分離され、複雑さが軽減されますが、プロジェクトが小さい場合は過剰になる可能性があります。
他のヒント
オプション1(インスタンスメソッド)を使用します。これにより、派生クラスの比較ロジックを改善できる(必要に応じて)。
#3は目立たないことが最も少なく、肥大化度の低いコードにつながることがわかりました。なぜなら、これらの方法を可能な限り柔軟/再利用可能にすることを強制する傾向があるからです。たとえば、C ++では、オペレーターのオーバーロードを使用してそれを処理する可能性があります。ユーティリティクラスがある場合(または、ネイティブデータ型の拡張を計画している場合)、ネット効果は同じで、別のプレゼンテーションだけです。
所属していません StackOverflow