web-dev-qa-db-ja.com

私はよくオブザーバーパターンを使用してクラスサイクルを作成します。どうすればこれを回避できますか?

オブザーバーパターンを使用してクラスサイクルを作成していることがよくあります。次のシナリオを検討してください。

  • 中央にアクセス可能なグローバルデータソース(件名)があります
  • データソースは、多くのGUIコンポーネント(オブザーバー)によってさまざまな方法で反映されます(たとえば、ボタンの異なる状態、サイズインジケーター、数値など)。
  • これらのGUIコンポーネントの一部(ボタンなど)は、グローバルデータソースを更新できます(たとえば、ボタンはデータソースから何かを削除したり、データソースが空の場合は無効として表示されます)

これで、いくつかのGUIコンポーネントとデータソース間のサイクルができました。

ここでは、オブザーバーパターンを、意図されていない何かのために乱用しますか?これを解決する別の方法はありますか?

3

サイクルはありません。

リポジトリはnotを行います。リポジトリは、オブザーバーinterfaceを認識し、そのメッセージを外部から設定されたインターフェース実装に送信します。

GUIはリポジトリを知っています。

  • 自身をオブザーバーとして登録します(つまり、そのインターフェースの実装)
  • ユーザー入力に対する反応として、リポジトリにコマンドを発行します

したがって、GUIからリポジトリへの依存関係は2つありますが、リポジトリからGUIへの依存関係はありません。 =>ここにサイクルはありません

9
mtj