web-dev-qa-db-ja.com

ネストされたクラスの使用は密結合の例ですか? (JavaFX)

だから私はこのゲームに取り組んでいます。ネストされたクラスは持っており、その機能を実行するために外部クラスのメンバー関数と変数にアクセスします。特に、外側のクラスにはゲームオブジェクトに関連するメンバー関数とデータが含まれますが、ネストされたクラスは AnimationTimer を拡張します。また、外部クラスはAnimationTimerでstart()メソッドを呼び出す必要があるため、AnimationTimerのインスタンスが必ず必要になります。 )外部クラスで。今、私はこれに少し慣れていないので、これから少し混乱しています post so

  1. これは本当に密結合のケースですか?
  2. このシナリオで何を提案しますか?それをネストされていないクラスに変換し、静的修飾子を介して「親」メンバー関数にアクセスする必要がありますか(この場合、これは適切であり、そうでない理由です)?

どんな提案も歓迎します:)

2
johndoe123

緊密なデータ結合はアンチパターンではありません。これは機能です。それが提供する利点が必要な場合は、緊密なデータ結合を使用します。

これについて不思議に思う理由は、最近、クラスを疎結合にすることについて多くを聞くからです。 モジュラリティを可能にする疎結合が存在します。責任を明確に分離したい場合や、モジュールを何かと交換したい場合は、クラスまたはモジュールを疎結合にします。そうしないと。疎結合により、物事を壊すことなくこれを行うことができます。

しかし、ゲームでは、緊密に調整する必要があるいくつかのクラスがあり、疎結合が提供する利点を必ずしも気にする必要はありません。このコンテキストでは、疎結合は実際には不利益になる可能性があります。複雑さが増しても大きなメリットはなく、パフォーマンスに悪影響を与える可能性があります。

これが、UIフレームワークが、UIが必要とするクラスの階層により適しているため、(継承よりも合成を優先することについて教えられてきたものとは対照的に)合成ではなく継承を使用する理由です。 C#やJavaなどの言語でのアセンブリ参照は、可能な限り密結合されています。

2
Robert Harvey