質問

ようにしている利用方法についてのパッシブます。となっているように思いる例が見受動ビューの法のデメーテル:

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

ることより良い実装の受動いたします。

役に立ちましたか?

解決

第一に、法のデメーテルのほうルールのプログラミングは原則やガイドラインにお戻りになられたときに、状態の原則な適用されます。もっとも、同法のデメーテルなも適用さ パッシブビュー その理由は、法律な問題です。

法のデメーテルでは防止の依存関係のチェーンなどの

objectA.objectB.objectC.DoSomething();

明らかにさobjectBの実施の変化を利用objectD代わりにその破objectAの依存関係の原因となるコンパイルエラー.している場合は極めて大き風プショットガンの手術時のチェーンに支障を実装によって変化します。

の場合 パッシブビュー

  • の者によりインターフェースのビューの実装を変更でき、インターフェイスは、現在も同じです。
  • の見通常公開性として一般化したデータの種類などのシステムの種類及びます。このときを変化させることができるUIな影響を及ぼす。
  • の発表者のビューが表示されている以上のデータ構造、ダンプを取得します。からの景色はきわめて単純で、発表者は、なにもできない依存関係のチェーン.

その例のやりくりは夫婦で別にされていまについては、通常であればこなどを実施

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

ながら、ビューのようなものです:

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

これを明確にもしております。

他のヒント

より良い実装がプレゼンターとビューの間のAPIを持っているだろう。プレゼンターは、(ビューのインターフェイスで定義されている)、単一のメソッドを介してそのビューにデータをプッシュします。ビューは、いくつかの内部のロジックに応じて、新たな入力を管理します。

そのため、プレゼンターはビューとデメテルの法則が安全であるについて何を知っている必要はありません。

さて、まあ、はい、それは<全角> の基本的にオブジェクトへのインターフェイスは、オブジェクトの実装を明らかにしてはならないと言うデメテルの法則を破るん。しかし、その後、もう一つは、あまりにも実装にヒントのhelluva多くを与えます。

私はそれはあなたが一般的には右のインターフェースを持っているかどうか尋ねるための時間だと思います。どのようなのこれらのテキストフィールドがありますか?誰がビューでそれらを設定していますか?ビューではなく、その逆で、データのモデルを求めてはなりませんか?

たぶん、あなたは、Observerパターンを必要とする - 。モデルは、利害関係者のリストを保持し、それらを通知したときの内部状態の変化

<時間>

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

今、あなたはすべての更新を行うコントローラを持っているので、

あなたは、しかしObserverパターンを必要としません。今、あなたが並列更新を行うためにコントローラーを書くことHVEので、全体的なコードにいくつかの複雑さとエラーやすを追加します。

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