リストが公開されているかどうかを気にするかどうかによって異なります。public の具象型を公開してアクセスすることで、実装の詳細を公開し、クラスとそのコンシューマー間の結合を増やします。ClassA
また、実装の詳細が適切にカプセル化されていないため、データの一貫性を強制する の機会を制限しています。
これは完全に受け入れられる場合もあれば、そうでない場合もあります。
オブジェクト モデルがばかげている場合は、許容できると思います。ばかげて、それはただのデータを含んでいるということです。このような状況は、JSON / XML をオブジェクトに解析するときによく発生します。物事はデータをミラーリングするように構造化されており、データがほとんどないため、動作はそれほど重要ではありません。また、小さなコードベースをハッキングするだけである場合、および/または変更の範囲が限られている場合、または関連する動作がほとんどない場合にも、より受け入れられます。
普段は避けてますけどね。
まず、 のリストに追加するアイテムはClassA
素数でなければならないと想像してください。メソッドを作成すれば、このチェックを簡単に実施できますがAddItem()
、リストが公開されている場合は、効果的に行うのがはるかに難しくなります。
次に、リストを辞書に変更することにしたとします。以前ClassB
はClassA
. AddItem()
代わりに、 for と呼ばれるandRemoveItem()
または類似のメソッドを作成した場合、内部実装が Set、Dictionary、または List などであるかどうかは気にせず、変更が行われたときに壊れることもありませんClassA
。ClassB
「物事に点を入れる」( のような) に関するガイドラインには、「デメテルの法則blah.List[3].GetProduct(3).Reviews.First()
」という名前があります。
デメテルの法則の重要なポイントは次のとおりです。
基本的な概念は、特定のオブジェクトが他のもの (サブコンポーネントを含む) の構造またはプロパティについて可能な限り想定しないようにすることです。
より多くのコードを書かなければならないこともよくありますが、それは変更を防ぎます。