パッシブビューを正しく使用する方法を理解しようとしています。Passive ViewはDemeterの法則を破っていますか?
//In the presenter code
myview.mytextfield.text = "whatever";
だから、パッシブビューのより良い実装は何だ:私はパッシブビュー上を見て、すべての例では、デメテルの法則を破るように私には思えますか?
パッシブビューを正しく使用する方法を理解しようとしています。Passive ViewはDemeterの法則を破っていますか?
//In the presenter code
myview.mytextfield.text = "whatever";
だから、パッシブビューのより良い実装は何だ:私はパッシブビュー上を見て、すべての例では、デメテルの法則を破るように私には思えますか?
最初に、デメテルの法則は、プログラミングのほとんどのルールと同様に、より多くの原則またはガイドラインであり、原則が適用されない場合があります。つまり、この法律の理由はこの場合問題ではないので、Demeterの法則は受動的視点には実際には適用されません。
デメテルの法則のような連鎖の依存を防ぐためにしようとしている。ObjectBにの実装の変更は、それはObjectAにの依存関係を壊すと、コンパイル・エラーが発生します代わりにobjectD使用する場合は明らかに
objectA.objectB.objectC.DoSomething();
。極端な場合は、実装変更によってチェーンが邪魔されるたびにショットガン手術を行うことになります。
パッシブビュー
だから、あなたが与えた例では、正常に実施される:
//from presenter
view.MeaningfulName = "data";
ビューのようなものであろうが:これは物事を少し明確に
//from view
public string MeaninfulName
{
get
{
return someControl.text;
}
set
{
someControl.text = value;
}
希望。
さて、よく、はい、そのはですが、基本的にはオブジェクトへのインターフェイスがオブジェクトの実装を明らかにしてはならないと言っているDemeterの法則を破っています。しかし、2番目の実装では、実装にも多くのヒントが与えられます。
一般的に適切なインターフェースを持っているかどうか尋ねる時が来たと思います。どのようなはこれらのテキストフィールドですか?誰がその見方でそれらを設定していますか?ビューでデータの代わりにモデルを要求してはいけませんか?
Observerパターンが必要かもしれません。モデルは、関係者のリストを保持し、内部状態が変化したときに通知します。
ああ、そのパッシブビュー。それを長い間見ていなかった。基本的には、私は2つの部分を見ています.1つはコントローラ(モデルではない)にすべての更新を駆動させることで、効率を上げるために特定のフィールドメソッドを公開してこれらのフィールドを更新することです。これは、結局のところ、マーフィーの法則のような、ある種の比喩的な意味での「法律」だけであるデメテルの法則に違反します。しかし、通常は良いアイデアです。この場合は、ビューをやり直して、個々のフィールドに更新をラップするためのファサードとして使用します。
しかし、Observerパターンは必要ありません。コントローラがすべての更新を行っているからです。これは、コードを複雑にし、エラーの可能性を追加します。これで、コントローラを書き込んで並列更新を行うことができます。
より良い実装は、プレゼンターとビューの間にAPIを置くことです。プレゼンタは、(Viewのインタフェースで定義されている)単一の方法でデータをビューにプッシュします。ビューは、内部ロジックに応じて新しい入力を管理します。
したがって、プレゼンターはビューとデメターの法則については何も知る必要はありません。
これはC#のものですか? –
Actionscript 3.0しかし、それは本当に問題ではありません。 – subb