質問

私は作成を避けようとしています モンスタークラス, 、そして私はあまり良くないパターンに気づき、誰かがこの問題について何か洞察を持っているかどうか興味がありました。

問題

A 複雑です。"神オブジェクト"を避けるために、ロジックの一部がに押し出されます BC.

Aは今、aとして機能します ファサード.それはBとCに依存します。

A -> B
  -> C

ただし、AにはBとCが必要とする構成データがあります。だから我々は同期してデータを維持する必要があります。

b.value1 = a.value1
b.value2 = a.value2

c.value1 = a.value1
c.value2 = a.value2

また、BとCはそれを使用するためにデータを変換する必要があります。

b.sum -> b.value1 + b.value2
b.doSomething -> b.sum() ...

c.sum -> c.value1 + c.value2
c.doSomethingElse -> c.sum() ...

重複したコードを書かないようにするために、これらの変換メソッドをAに戻します。

a.sum -> a.value1 + a.value2

b.doSomething -> a.sum() ...
c.doSomethingElse -> a.sum() ...

しかし、これはBとCがaだけでなく、そのデータに依存していることを意味します。

A -> B -> A
  -> C -> A

そして、これは循環的な依存関係をもたらします。

私は依存性注入とファクトリパターンを研究してきましたが、これらの2つのアイデアは多くの問題を解決しましたが、私はどのように作成するかに オブジェクトグラフ そのノードは実行時に構成可能です。言い換えれば、実行時に特定のノードまたはノードのグループの動作を外部から変更する機能が必要です。構成状態をオブジェクトグラフに伝播する最良の方法は何ですか?

編集

私の考えを質問に定式化しようとしている最後の数時間を費やしたので、私は解決策につまずいたかもしれないと思います。私がする必要があるのは、構成プロバイダクラスを作成することだと思います D これは、この情報に依存するノードに渡されます。

A -> B -> D
  -> C -> D
  -> D

Dは管理しています value1value2 そして提供します sum メソッド。Dには、value1とvalue2が変更されたときに発生するイベントもあり、依存ノード(A、B、C)が変更に応答できるようになります。

この解決策はうまくいくと思いますが、より良い解決策がある場合に備えて、とにかく投稿したかったのです。この場合 私が探しているパターン、それは何と呼ばれていますか?「プロバイダー」パターン?(と混同しないようにASP.NET'sの プロバイダーモデル!)

役に立ちましたか?

解決

あなたは観察者または仲介者のパターンを探していますか?上でそれをチェックアウト http://sourcemaking.com/design_patterns/observer

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top