2009-05-26 5 views
3

パッシブビューを正しく使用する方法を理解しようとしています。Passive ViewはDemeterの法則を破っていますか?

//In the presenter code 
myview.mytextfield.text = "whatever"; 

だから、パッシブビューのより良い実装は何だ:私はパッシブビュー上を見て、すべての例では、デメテルの法則を破るように私には思えますか?

+0

これはC#のものですか? –

+0

Actionscript 3.0しかし、それは本当に問題ではありません。 – subb

答えて

4

最初に、デメテルの法則は、プログラミングのほとんどのルールと同様に、より多くの原則またはガイドラインであり、原則が適用されない場合があります。つまり、この法律の理由はこの場合問題ではないので、Demeterの法則は受動的視点には実際には適用されません。

デメテルの法則のような連鎖の依存を防ぐためにしようとしている。ObjectBにの実装の変更は、それはObjectAにの依存関係を壊すと、コンパイル・エラーが発生します代わりにobjectD使用する場合は明らかに

objectA.objectB.objectC.DoSomething(); 

。極端な場合は、実装変更によってチェーンが邪魔されるたびにショットガン手術を行うことになります。

パッシブビュー

  • の場合、プレゼンターはビューの実装がある限り、インターフェイスが同じままで変更できるようにインターフェイスによって異なります。
  • ビューでは通常、システムタイプやコレクションなどの一般的なデータ型としてプロパティが公開されます。これにより、発表者に影響を与えずにUIを変更することができます。
  • プレゼンターには、このビューは、データ構造、つまりデータを取得してダンプする場所としてしか見えません。ビューはかなりシンプルなので、プレゼンターは依存関係チェインを行うことすらできません。

だから、あなたが与えた例では、正常に実施される:

//from presenter 
view.MeaningfulName = "data"; 

ビューのようなものであろうが:これは物事を少し明確に

//from view 
public string MeaninfulName 
{ 
    get 
    { 
     return someControl.text; 
    } 
    set 
    { 
     someControl.text = value; 
    } 

希望。

1

さて、よく、はい、そのですが、基本的にはオブジェクトへのインターフェイスがオブジェクトの実装を明らかにしてはならないと言っているDemeterの法則を破っています。しかし、2番目の実装では、実装にも多くのヒントが与えられます。

一般的に適切なインターフェースを持っているかどうか尋ねる時が来たと思います。どのようなこれらのテキストフィールドですか?誰がその見方でそれらを設定していますか?ビューでデータの代わりにモデルを要求してはいけませんか?

Observerパターンが必要かもしれません。モデルは、関係者のリストを保持し、内部状態が変化したときに通知します。


ああ、そのパッシブビュー。それを長い間見ていなかった。基本的には、私は2つの部分を見ています.1つはコントローラ(モデルではない)にすべての更新を駆動させることで、効率を上げるために特定のフィールドメソッドを公開してこれらのフィールドを更新することです。これは、結局のところ、マーフィーの法則のような、ある種の比喩的な意味での「法律」だけであるデメテルの法則に違反します。しかし、通常は良いアイデアです。この場合は、ビューをやり直して、個々のフィールドに更新をラップするためのファサードとして使用します。

しかし、Observerパターンは必要ありません。コントローラがすべての更新を行っているからです。これは、コードを複雑にし、エラーの可能性を追加します。これで、コントローラを書き込んで並列更新を行うことができます。

+0

あなたは2番目のことについて正しいです。私はそれを使用しません。また、パッシブビューを理解する限り、ビューはモデルと結合してはなりません。プレゼンターの役割は、モデルからデータを取り出してビューにプッシュすることです。 http://www.martinfowler.com/eaaDev/PassiveScreen.html – subb

+0

また、パッシブビューパターンを理解しようとしています。今は何も使っていません。私はそれをもっと明確にするために質問を編集しました。 – subb

1

より良い実装は、プレゼンターとビューの間にAPIを置くことです。プレゼンタは、(Viewのインタフェースで定義されている)単一の方法でデータをビューにプッシュします。ビューは、内部ロジックに応じて新しい入力を管理します。

したがって、プレゼンターはビューとデメターの法則については何も知る必要はありません。

関連する問題