問題タブ [passive-view]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1221 参照

events - 複数のビューを持つMVP:イベントを正しい方法で送信する

パッシブビューでMVPを初めて実装しようとしていますが、このパターンで誰が誰に通知しているかについて少し混乱しています。ビューが変更された場合はビューがプレゼンターに通知し、次にプレゼンターが他のすべてのユーザー(他のビューとモデル)に通知することを理解しています。

今、私の場合、複数のビューがあり、UIの外部で変更できるモデルもあります。次の2つのシナリオが発生する可能性があります。

  1. View [i]が変更され、Presenterに通知されます。プレゼンターは他のすべてのビューとモデルに通知する必要がありますが、View[i]には通知しません。さらに、ビューもモデルも、変更されたばかりであっても、変更通知をプレゼンターに送信することはできません(そうしないと、イベントの無限ループが発生します)。

  2. モデルが変更され、プレゼンターに通知されます。プレゼンターはすべてのビューに通知する必要がありますが、モデルには通知しません。ただし、変更されたばかりであっても、どのビューも変更通知をPresenterに送信することはできません。

プレゼンターは誰に通知し、誰に通知しないのですか?また、モデルは変更通知を送信する必要があるかどうかをどのように知るのでしょうか。結局のところ、それは変更されたばかりですが、必ずしも誰が知っているわけではありません。

1つの可能性は、すべての人(モデル、ビュー、およびプレゼンター)が変更通知を自由に送信できるようにすることですが、変更を最初にトリガーしたオブジェクトへの参照を通知内に保存します(これにより、通知をイベントオブジェクトにカプセル化します)。その後、すべてのオブジェクトは、変更の元のトリガーでない場合にのみ通知を送信します。しかし、それを行うためのより簡単でクリーンな方法はありますか?

0 投票する
2 に答える
1074 参照

c# - C# Winforms でパッシブを使用してモデル ビュー プレゼンターを適切に実装するにはどうすればよいですか?

私は今、デザイン パターンを勉強しています。私はこのモデル ビュー プレゼンターにかなり慣れていませんが、既に asp.net mvc での経験があります。

テキスト ボックス内の文字列は、コンボ ボックスに基づくアルゴリズムで並べ替えられます。ボタンをクリックすると、null参照例外がスローされます

UI は次のとおりです。ここに画像の説明を入力

ここに私のクラスとコードがあります:

この投稿を短くするために、モデルのコードとソート機能を含むクラスは含めていません。私が抱えている問題は、ボタンをクリックするとnull参照例外エラーがスローされることです。これは、すでに何時間も立ち往生しています。

閣下/奥様、あなたの答えは大変役に立ちます。ありがとう++

0 投票する
1 に答える
176 参照

css - Presenter を介して View でエラーと CSS を管理する

私のプロジェクトで実装した MVP モデルはパッシブ MVP です。プレゼンターはビューへの参照を持っています。また、プレゼンターには、ビューが従わなければならないディスプレイインターフェイスがあります。

私の現在のディスプレイインターフェースは以下の通りです -

ここでの問題は、入力エラー メッセージの設定/クリアに使用されるメソッドです。setXXXError()ビューによって実装されたそれぞれは、対応するものErrorWidgetを表示し、おそらく対応するものを強調表示しますInputWidget(赤などでマークします)。逆に、各clearXXXError()メソッドは対応する を非表示にし、対応ErrorWidgetする からハイライトを削除しますInputWidget。このように、プレゼンターは CSS 管理を明示的に処理する必要がないため、CSS の変更から切り離されます。ビューだけがそれについて心配する必要があります。

ただし、このアプローチでは、インターフェイス内のエラー関連のメソッドが多すぎます。

私が考えた別のアプローチはErrorWidget、インターフェイスで s を公開することです。しかし、GWT にはHasCss-type インターフェイスがないため、明示的にウィジェット タイプ (たとえば、ラベル) を指定するか、IsWidgetインターフェイスを使用する必要があります (これにより、CSS プロパティだけでなく、ウィジェット全体が再び公開されます)。また、このアプローチでは、プレゼンターで CSS の変更を明示的に指定する必要があります。

私のアプローチに代わるより良い方法はありますか? または、私がしていることは十分ですか?また、現在のアプローチの改善も気に入っています。

0 投票する
2 に答える
182 参照

c# - パッシブ ビュー - 特定のロジックを表示する

パッシブ ビュー デザイン パターンを実装したいとしましょう。リストボックスを含むビューがあります(将来、リストビューなどと交換する可能性があります)。ここで、パッシブ ビューを使用して、ビューを可能な限りダムにする必要があります。選択を変更したいとしましょう。このロジックをプレゼンターに配置するため、ビュー インターフェイスにプロパティを追加して、ビューのリストボックスの SelectedIndex プロパティを取得および設定します。しかし、将来リストボックスをリストビューと交換したい場合、リストビューには SelectedIndex プロパティがないため、困っています。次に、ビューにいくつかのロジックを実装しますか (基本的に、少しばかげないようにします)。

または、ビューとプレゼンターの間に何らかのアダプターを配置しますか。最も論理的なアプローチは何でしょうか?

0 投票する
2 に答える
683 参照

java - JCheckbox はコントローラによってのみ状態を変更します

通常の JCheckbox は、ユーザー入力に直接反応し、目盛りを設定または設定解除します。この後、MouseListener が呼び出されます。私が達成したいのは、JCheckbox の状態はコントローラーによってのみ変更できるということです。これを達成するためのまともな方法は何ですか?

目盛りをすぐに追加/削除するマウスリスナーを追加しようとしましたが、これによりちらつきが発生します。

私が見つけた唯一の方法は、 processMouseEvent メソッドを上書きすることでしたが、これは本当に悪いです...

EDIT(私の現在のバージョン):これは今すぐ動作します。前にモデルを調整するのを逃しました。

0 投票する
0 に答える
271 参照

c++ - FLTK を使用した MVP パッシブ ビュー アプローチ

here で説明されているように、MVP Passive View で FLTK を使用しようとすると、非常に基本的な問題があります。なんとかやり遂げましたが、自分のやり方が正しいとは思えません。

Fl_Windowいくつかのウィジェットと OpenGL 機能用の が含まれFl_Gl_Windowています。ご存知のように、ウィジェットなどを と のFl_Windowbegin()に追加できますend()。これらの呼び出しの間に直接追加する場合は、すべてをインスタンス化する必要があるようです

。この場合、これで問題ないかどうか知りたいです。または、本当に間違っていると感じるので、誰かがより良い解決策を教えてくれるかもしれません。 )

main.cpp

View.h

View.cpp

GlWindow.h

IPresenter.h

IView.h は、IPresenter.h と同じように見えます。

私がしたいのでMVP、両方のウィンドウはビュー(View別のものを含むもの)です。のシーケンス図に示されているように、 は および とView通信する必要があり、は への参照を保持する必要があり、その逆も同様です。そのため、インターフェイス ヘッダーで前方宣言を使用しました。PresenterFowlerViewPresenter

すでに述べたように、これを行うためのより良い方法があるかどうかを知りたいです。Fl_Gl_Windowおそらく、この時点でインスタンス化せずに を追加することは何とか可能です。あるいは、私のMVP Passive Viewアプローチが間違っているのかもしれません。

私の説明が理解できることを願っています。よろしくお願いします。