問題タブ [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 投票する
4 に答える
1432 参照

java - Swing、パッシブ ビュー、長時間実行タスク

スイングでパッシブ ビューベースの GUI システムを実装しようとしています。基本的に、ビューの実装 (実際にスイング コードを含む部分) を最小限に抑え、Presenter クラスでほとんどの作業を行いたいと考えています。プレゼンターはスイングに依存してはならず、「ショーを実行」する必要があります。つまり、ビューに何をすべきかを伝え、その逆ではありません。

長時間実行されるタスクや、一般的なスレッドの分離を処理するときに問題が発生します。GUI の更新を EDT で実行し、プレゼンター ロジックを別のスレッドで実行する必要があります。プレゼンターに GUI の一部を更新してもらいたい場合は、非常に簡単です。次のように記述します。

ただし、何らかのアクションが発生したことを GUI がプレゼンターに通知する場合は、EDT から切り替えて、別のスレッドでそれに反応したいと考えています。

actionPerformed コードは EDT から実行されているため、presenter.buttonPressed も同様です。スイングには SwingWorker の概念があることを知っています-別のスレッドでタスクを実行しますが、プレゼンターにスイングコードを挿入する必要があり、ビューがショーを実行しているようです。これを解決する方法はありますか?

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

logic - パッシブ ビューと表示ロジック

MVC と MVP および同様のパターンでは、可能な限り愚かな (ロジックがほとんど含まれていない) 「受動的なビュー」のアプローチがしばしばあります。これにより、単体テストが容易になり、ビューとモデルがより明確に分離されます。

これらのパターンには非常にさまざまな特徴があり、特に MVP の理解は記事ごとに異なるようです。したがって、私の質問は「このパターンを正しく実装するにはどうすればよいか」ではありません。

ビューとモデルの分離を改善し、アプリケーションのテスト容易性を向上させたいと考えています。したがって、私は受動的な見方をしたいと思います。しかし、私の質問は、明らかにビューのみに関連するロジックをどこに配置しますか? スクロールバーが移動したときにテキストビューアがテキストをスクロールするように。これのロジックをプレゼンターに入れますか? テキストビューアにいくつかの拡張機能があるとしましょう。テキストパッセージにマーキングを設定するようなものです。このロジックは、Presenter に入れるのが明らかに理にかなっています。ただし、ビューのすべての「直接的な」ロジック (テキストのスクロールなど) と混合すると、Presenter が非常に大きくなる可能性があり、これも実際には優れた設計ではありません。

だから私の質問は、パッシブビューのディスプレイ関連のロジックをどこに配置し、プレゼンターにどの機能を混在させるかです。

ありがとう!

0 投票する
3 に答える
613 参照

javascript - JavaScript でのパッシブ ビュー

JavaScript で MVP - Passive View パターンの実装を考えています。ほとんどの場合、ビューは、プレゼンターがイベント リスナーをアタッチする単純な dom 要素になります。しかし、JavaScript ベースの擬似選択ボックス、自動提案、aria 機能などのウィジェットに関しては、これを JavaScript ビュー クラスの一部にする必要がありますか?それとも、ビューを変更するロジックをプレゼンターの一部にする必要がありますか? 私はjavascriptMVCs ビューを見てきましたが、それらはロジックなしで生成されたテンプレートのみのようです。しかし、私にとっては、html 選択ボックスをリッスンしているプレゼンターと、実際の選択ボックスを模倣する JavaScript ロジックを備えた擬似選択ボックスをリッスンしているプレゼンターとの間に違いはないようです。どちらも、ボックスが内部でどのように機能しているかを気にする必要はありません。変更イベントをリッスンするだけです。

それで、あなたはどう思いますか。ビュークラスの仕事は何ですか。

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

c# - モデルビュー-大きなオブジェクトの表示と転送

私は伝統的に次のようにModel-View-Presenter[パッシブビュー]を実装してきました。

また、ビューでのみプリミティブ型を使用する必要があることを常に理解していたため、従来はインターフェイス(、、)でプリミティブ型のみを使用していましIViewint。リポジトリ(など)で、のアイテムのリストを表示する場合は、モデルからプレゼンターにジェネリックコレクション()を渡す必要があります。これは、プリミティブ型のみで構成されているというビューの背後にあるルールに違反しますか、それともアーキテクチャ的には問題ありませんか?stringboolNHibernateDataGridViewIList<T>

私がデータ転送オブジェクト(DTO)を持っていたとしても、それは私が実装しようとしているパッシブビュースタイルというよりはむしろ監視コントローラーになります。

考え?

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

python - MVP:プレゼンター-モデルコミュニケーション

MVPデザインパターンでのモデルとプレゼンター間の通信についての設計上の質問があります。より正確には、パッシブビューから派生したものです。

例として、次の単純なGUIを想定します。ビューがリストであるウィンドウがあり、ファイルダイアログを開いてファイルを選択する可能性があります。選択が完了すると、ファイルがリストに追加されます。

私のモデルは、私が開いたすべてのファイルのコレクションになります。

簡単な実装が思い浮かびます(疑似Pythonコード):

ソリューションA

この場合、ファイルがモデルに追加されたことを知っているので、それに応じてビューを更新します。

一方、ファイルをモデルに追加してから、モデルが変更されたことと、プレゼンターがビューを更新する必要があることを通知するのを待つことができます。

ソリューションB

さて、この場合、両方の実装は問題なく機能します。ただし、モデルがファイルも監視し、たとえば、ファイルの1つが削除されたときにプレゼンターに通知する必要があると仮定します。次に、とにかくこの種のonModelChanged()コールバックメカニズムが必要です。

私の質問は次のとおりです。ビューを更新するための2つの方法(同期更新の場合はA、非同期の場合はB)を組み合わせるか、ソリューションBで提案されているようにすべてを1か所に集中させる必要がありますか?

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

c# - C#WinFormsモデル-ビュー-プレゼンター(パッシブビュー)

私はC#でWinFormsアプリケーションを開発しています。GUIプログラミングの経験は限られており、その場で多くのことを学ぶ必要があります。そうは言っても、これが私が構築しているものです。

次のリンクを参照して、一般的なGUIを参照してください。

GUI http://img227.imageshack.us/img227/1084/program0.jpg

今、私はすでに多くの作業を行っていますが、非常に悪い自律設計パターンです。プロジェクトが特定のサイズに達するとは思っていなかったので、大規模なリファクタリングを行うときが来ました。

私はGUIデザインパターンについて多くのことを研究してきましたが、実装したいパターンはパッシブビューです(http://martinfowler.com/eaaDev/PassiveScreen.htmlを参照)。私はこれをすべてまとめる方法についていくつかの助けを探しています。

バックグラウンド:

1)ユーザーが「TreeView」でクリックした内容に応じて、左下隅の「リスト」には、「エディター」領域に入力できるオブジェクトのリストが表示されます。これらのオブジェクトは、TextBoxまたはDataGridViewである可能性があります。ユーザーはリストを切り替えて、「エディター」に表示したいものを選択します

2)モデルは基本的に、データと構成ファイルを含むフォルダーです。特定のディレクトリで実行され、出力ファイル/フォルダなどを作成する外部プログラムがあります。私が開発しているこのプログラムは、これらのオブジェクトをユーザーフレンドリーな方法で効果的に管理/構成するように設計されています。

3)私が行ってきた方法の問題は、テストがほぼ不可能であるため、MVP風のパッシブビューデザインパターンに移行することです。

プログラムがビューとは独立して動作するようにしようとしています。パッシブビューパターンでより複雑でインタラクティブなビューが使用されている例は見つかりませんでした。

質問:

1)プログラムの「外観」全体に対して1つの大きなインターフェイス/ビューを実装してから、TreeView、エディター、ロガーなどのそれぞれに対してサブインターフェイス/サブビューを実装する必要がありますか?それとも、これを行うためのより良い「構造」がありますか?

2)ビューからプレゼンター/コントローラーへのイベントの「受け渡し」(WRTパッシブビューデザインパターンを使用する用語が何であれ)に関しては、これをどのように行う必要がありますか?更新が必要な単純なプロパティがある場合もあれば、展開するための一連の手順全体が必要な場合もあります。

このトピックに関する提案やアドバイスが欲しいです。私はインターネットを調べましたが、このプロジェクトを継続するのに役立つ適切な例が見つかりませんでした。

前もって感謝します!

ダニエル

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

c# - C#WinForms Model-View-Presenter(パッシブビュー)プログラムを構築する方法は?

私は次の基本的な考え方(Visual Studioの基本的なルックアンドフィールをモデルにしたもの)を持つGUIを設計しています。

  1. ファイルナビゲーション
  2. コントロールセレクター(エディターコンポーネントに表示するものを選択するため)
  3. 編集者
  4. ロガー(エラー、警告、確認など)

今のところ、ファイルナビゲーションにはTreeViewを使用し、エディターに表示するコントロールを選択するにはListViewを使用し、ロガーにはRichTextBoxを使用します。エディターには、TreeViewで選択されているものに応じて、2種類の編集モードがあります。エディターは、ファイル内のテキストを手動で編集するためのRichTextBoxになるか、このパネルで編集するためのドラッグアンドドロップDataGridViewsとサブTextBoxを備えたパネルになります。

モデルをビューから完全に分離するために、パッシブビューのデザインパターンに従おうとしています。このプロジェクトの性質上、追加するコンポーネントはすべて編集/削除される可能性があります。そういうものとして、私は与えられたコントロールから次のコントロールへの独立のためにそこにいる必要があります。今日はファイルナビゲーションにTreeViewを使用していますが、明日は別のものを使用するように言われた場合、比較的簡単に新しいコントロールを実装したいと思います。

プログラムの構成方法がわかりません。コントロールごとに1つのプレゼンターを理解していますが、ビュー(プログラムのGUI全体)とコントロール(サブビュー)を使用して、ビュー全体と個別のビューを交換できるようにする方法がわかりません。私のモデルを反映するコントロール。

パッシブビュー標準では軽量であると想定されているメインビューで、サブビューを個別に実装しますか?もしそうなら、私がナビゲーターオブジェクトの役割を抽象化するためのインターフェースINavigatorを持っているとしましょう。ナビゲーターには、ナビゲータービューとメインビューの間で動作するプレゼンターとモデルが必要です。どこかでデザインパターンの専門用語に迷い込んでいるような気がします。

最も類似した質問はここにありますが、それは私の質問に十分に詳細に答えていません。

このプログラムを「構成」する方法を理解するのを手伝ってくれる人はいますか?助けていただければ幸いです。

ありがとう、

ダニエル

0 投票する
3 に答える
3312 参照

c# - MVP パッシブ ビュー - ビュー データとモデル データを分離しておく

パッシブ ビュー パターンを使用して MVP トライアドを実装しました。つまり、ビューには単純なゲッターとセッターしか含まれていません。ただし、ビュー データとモデル データの分離に問題があります。特に、ビューステートの変更を処理する場合。

トライアドは、ユーザーがリストからパーツを選択できるようにするために使用されます。パーツのリストはモデルによって提供され、各パーツは一意の ID によって一意に識別されます。

パーツが次のようになっているとします。

ビューはユーザーにリストを表示し、パーツを選択できるようにします

リストは DataGridView に表示され、パーツは dataGridView の行をクリックして選択されます。

ID はユーザーに表示されず、電圧も表示されないため、モデルは partCode と説明のみを含む DataTable を作成します。この DataTable は、プレゼンターによって、DataGridView の DataSource プロパティにマップされるビューのプロパティに割り当てられます。

ここまでは順調ですね。View は、フィルター処理されたデータを DataGridView に表示します。

私が抱えている問題は、ユーザーが選択した部分を返すことです。

一意の ID は表示されず、他の情報が一意であることを保証できないため、ビューは一意の ID を認識しません。したがって、選択されたパーツを一意に識別することはできません。

基本的に、他のデータを使用するコンポーネントを使用せずに、ビュー データ (選択した行) をモデル データ (選択した部分) に変換しようとしています。

これまでのところ、次の解決策があります。

1) ID を含む DataTable がビューに渡され、表示がユーザーに表示されないようにフィルター処理されます。選択した行の ID を返すのは簡単です。ここでの問題は、テストされていないロジック (ディスプレイのフィルタリング) でビューを汚染してしまったことです。

2) ビューは行インデックスを返し、モデルはこのインデックスを元のデータの行と照合します。これは、ビュー内の順序が決して変更されないようにすることを意味します。これは可能ではありますが、ビューがデータを表示 (および操作) する方法を制限します。これはまた、モデルをビュー データ (行インデックス) で汚染します。

3) (2) のバリエーション。プレゼンターとビューの間に配置するアダプター オブジェクトを作成します。行から ID への変換コードをモデルからアダプターに移動します。次に、プレゼンターは dataGridAdapters パーツの変更イベントを処理します。

現在、テスト可能であるため、3に向けて学習しており、ロジックをビューから除外し、データをモデルとプレゼンターから除外しています。

これにどのように取り組みますか - より良い解決策はありますか?

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

java - MVPパッシブビュー-複合ビューと複合プレゼンター

パッシブビューパターンに関するM.ファウラーの記事を見つけました。自分のアプリケーションに適用したいのですが。UIにはSwingを使用しています。私はそれを実装する方法のチュートリアルや例を検索するのに数時間を費やしましたが、あまり役に立ちませんでした。誰かがデザインを理解したり、ここで良い例を提供したりするのを手伝ってもらえますか?MVPの「M」で「ドメインモデル」がわかります。

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

javascript - Javascript MVP (パッシブ ビュー) ライブラリ

大規模な GWT に取り組んでいると、GWT に付属する MVP パターンに夢中になります。基本的には、コントローラーがすべてのビジネス ロジックを認識しているパッシブ ビューであり、ビューは可能な限りダンプされます。これの優れた点は、ビューを簡単に変更できることと、DOM が関与しないため単体テストをすばやく実行できることです。

backbone.js に関する記事を読んだことがありますが、ロジック全体がビューにあり、ビューとビジネス ロジックが実際に分離されていないようです。しかし、多分私は間違っています。

そこで、GWT と同じアプローチの JavaScript ライブラリが存在するのだろうかと考えています。