私の前の質問のフォローアップとして、次のよう な一般的な境界を組み合わせた関数を持つ:
<T extends Foo & Bar> void doStuff(T argument) {
//do stuff wich should only be done if arguments is both foo and bar
}
これは未指定のオブジェクトからキャストできないため、これらのインターフェイスを実際に実装するオブジェクトについての知識が必要です。渡すオブジェクト引数の特定のタイプを知る必要がdoStuff(T a)
あることは、デメテルの法則に違反しているように思えます。
この関数は、実際のクラスを知る必要性を指定していません (さまざまなクラスが存在する可能性があります)。このクラスを知ると、コード ベースの依存関係が増加するため、知りたくありません。
これらの境界を使用するのはアンチ パターンですか? もしそうなら、どのようにそれを避けるべきですか?
ケース シナリオには、オブジェクトが永続的であることを指定する 1 つのインターフェイスと、関連するエンティティを持つ別の指定されたオブジェクトが含まれます。この場合のdoStuff(T a)
関数は、永続化されたときに関連エンティティを永続化しました。ただし、非永続エンティティも関連エンティティを持つことができますが、doStuff(T a)
関数によって処理されるべきではありません