問題タブ [presentation-model]
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.
java - Androidのプレゼンテーションモデル:プレゼンテーションモデルでモデルをラップする方法は?
PM 設計 (MVC + プレゼンテーション モデル) でアプリを作成しようとしていますが、プレゼンテーション モデル クラスでモデル クラスを巧みにラップする方法については既に固執しています。ここで、Model クラスのインスタンスの値に基づいて画像とテキストを変更する簡単なコードを記述します。
列挙型
MVC + RM の M
MVC の RM + RM
MVC + RMのVC
public void update()
私の質問:クラスのロジックを記述する方法はPresentationModel
? Object
から変数しか取得できず、NotifyObserver()
入れ子になったswitch
or if
...else
を使用しても、コードがまったく思い浮かびません...
architecture - 複雑なユースケースを推進するためのアーキテクチャ
私は、何人かの開発者によって実装されるソフトウェアを設計しようとしています。
このソフトウェアには、UIからのいくつかの手順とコマンドを含む多くの複雑なユースケースがあります。UIとBussinessロジックから明確に分離したいので、各ユースケースのさまざまな状態をUIによって駆動/制御するのではなく、下位層で実行して、UIを本質的に「ダム」にする必要があります。
これを解決するために、DCIパターンとStateパターンの混合を検討しました。
同様のアプリケーションでの経験を知り、可能であればアドバイスを受け取りたいと思います。
ありがとうございました!
apache-flex - Flex プレゼンテーション モデル: 状態をビューに保持する必要がありますか?
V1a と V1b というビューの 2 つのインスタンスがあります。これらは同じタイプのインスタンスであるため、プレゼンテーション モデル (PM1) の同じインスタンスがシングルトンとして各インスタンスに注入されるため、どちらも同じインスタンスを使用します。各ビューには異なる状態 (V1a の場合は S1a、V1b の場合は S1b) が表示されますが、これら 2 つのビューを切り替えると (TabNavigator にある場合など)、奇妙な結果が得られます。
- ユーザーはV1aを見て、S1aの状態を確認します。
- ユーザーは V1b を見て、S1b の状態を確認します。
- ユーザーは再びV1aを確認しますが、今回はS1bの状態が表示されます。
これは、S1b が PM1 シングルトンの状態を上書きし、V1a が再度開かれたときにビューに V1b の状態が表示されるためです。私には3つの解決策があります:
- シングルトンを注入しないでください! しかし、それが最も一般的な方法のようです。
- ユーザーがビューを切り替えると、そのデータが PM1 に再注入されます。これは、最上位レベルに状態があり、それを最下位レベルに注入する必要がある階層ビューでは複雑になる可能性があります。バインディングにはさらに注意が必要です。
- ビューで状態を保持し、ビューが動作する必要があるときに PM に渡します。
解決策 3 が最も簡単なようです。ただし、プレゼンテーション モデルについて私が読んだことはすべて、状態がプレゼンテーション モデルに保持されていることを示唆する傾向があります。誰が私が間違っているのか教えてもらえますか? 私が知る限り、プレゼンテーション モデルよりもビューで状態を保持する方がはるかに簡単で安全です。
user-interface - プレゼンテーション モデルと MVVM の違い
私はこれら 2 つのアーキテクチャについて読んでいました。しかし、私は2つを区別することができません。PM では、プレゼンターはモデル データを充実させ、ビューにはコントローラー (MVC コントローラー) ロジックが含まれます。これは MVVM と同じケースです。
私は多くの記事を読みましたが、それぞれに定義がありますが、それらの違いは説明されていません。
design-patterns - プレゼンテーション モデルとパッシブ ビュー
言及された2つのパターンの違いについて疑問に思っています。プレゼンテーション モデル パターンに同期コードが必要であり、そのコードがプレゼンテーション モデル自体にあると考えると、パターンは非常に似ていると思います。
どちらもイベントをプレゼンテーション モデル / プレゼンターに委任します。プレゼンテーション モデルとプレゼンターはドメイン モデルを指揮し、ドメイン モデルも観察します。変更が発生すると、両方ともビューと同期します (プレゼンテーション モデルの同期コードはプレゼンテーション モデルにあるため)。
私の意見では、違いは、プレゼンテーション モデルがビューの抽象的な形式であることです。ビューの状態と動作を記述します。そのため、すべてのビュー ステート情報のプロパティがあります。この情報は、同期コードを介して同期されます。受動的な見方では、発表者は必然的に抽象的な形の見方ではありません。そのため、プレゼンターは必ずしもビュー ステートを表すプロパティを持っているわけではありません。そのため、プレゼンターは状態を「同期」しません (コントロールとプレゼンター自体の属性)。代わりに、(変更時に) ドメイン データをコントロールに「コピー」するだけです。したがって、違いは本質的にビューの抽象化です。そのプレゼンテーション モデルは、パッシブ ビューではプレゼンターがドメイン データのデータ マッパーと見なされる可能性があるときに提供します。
これまでのところ大丈夫ですか、それとも何か重要なことを見逃していますか?
ありがとう、よろしくパトリック
java - Java Swing とプレゼンテーション モデル
Java でアプリケーションを開発しており、GUI に Swing を使用しています。ここで Martin Fowler によって導入されたプレゼンテーション モデル パターンを使用してそれを行うつもりでした: http://martinfowler.com/eaaDev/PresentationModel.html
しかし、Presentation Model クラス内で View を処理しなければならないときは本当に好きではないので、別の方法で処理できると考えています。
私のアプローチでは、Swing コンポーネント モデル (JTable の TableModel や JButton の ButtonModel など) を拡張する CustomViewModel クラスを用意します。このクラスは、ユーザーがモデルのデータを更新するときに実行されるメソッドをオーバーライドします。だから私は DomainModel を更新してから親メソッドを呼び出すような仕事をします。このようにして、DomainModel と ViewModel の間でデータを常に同期させることができます。
例えば:
セットアップGUI機能では、次のようになります。
だから今、私のコントローラー関数で私は持つことができます:
MyCustomTableModel には、JTable がコンテンツを更新するために使用するメソッドがオーバーライドされており、実際のモデルを更新している親 setModel への実際の呼び出しの前にコードがあります。ビュー参照は必要ありません。問題は、残りのコンポーネントと同様の関係を持たない JFileChooser を処理する必要がある場合です。ViewModel クラスについて話しています。
このアプローチに取り組む方法を知っている人はいますか。
私が達成しようとしているのは、MyCustomComponentModel と Controller の両方で View を参照しないことです。TableModel、ButtonModel などのビュー モデルを拡張する CustomComponentModel のセットを介して、コントローラーとビューの間の通信を行いたいと思います。その目的は、TDD を容易にすることです。このアプローチでは、物事のレイアウトのみがテストされません。
design-patterns - 複雑なカスタム コントロール (独自のモデルを持つ) でプレゼンテーション モデルを使用する
WinForms でMartin Fowler のプレゼンテーション モデルを使用するアプリケーションがあります(WPF の方が適していますが、それは関係ありません)。そのため、すべてのビューには、UI ロジックとドメイン モデル変換ロジックが存在する場所を表すプレゼンテーション モデルがあります。これは、ビュー内のコントロールが組み込みの .NET WinForms コントロールまたはサードパーティ コントロールである場合に非常にうまく機能します。
DRYプリンシパルをサブスクライブすることで、アプリケーションの複数のビューで使用される一連の独自のカスタム コントロールを提供する、アプリケーションで使用されるクラス ライブラリがあります。これらの各コントロールは、何らかの機能上の関係を持つ小さなコントロールの複合体です。カスタム コントロールには、UI ロジックを制御する独自のプレゼンテーション モデルもあります。
私の質問は、ビューの懸念がカスタム コントロールの基になる UI ロジックに結び付けられないようにアプリケーションを設計するにはどうすればよいかということです。 ここに図があります:
フォームのプレゼンテーション モデルからコントロールのプレゼンテーション モデルへの情報の流れが、ビュー自体を通過する必要はありません。しかし同時に、プレゼンテーション モデルは互いのことを知りません (知る必要もありません)。
android - データ バインディング: プレゼンテーション モデルとビュー、Android のサードパーティ ライブラリ
私はすぐにこれが定型文の多い Android で問題になることに気付きました。コードのリファクタリングを開始したので、データ バインディングのハーフ @ssed バージョンを効果的に作成しています。それを一般化して車輪を再発明することにこれ以上時間を費やしたくありません。コミュニティが使用するサードパーティのライブラリとして、何か良い解決策があるかどうか疑問に思っていました。
robo-bindings を見つけましたが、そのプレゼンテーション (独自のものや堅牢性などの単体テストに焦点を当てています) が本当に気に入りましたが、まだかなり小さいようで、ライブラリと一般的なサポート/進化の進行に関する問題が心配です。前方。
人々が使用している他のライブラリはありますか?
ありがとう。
design-patterns - プレゼンテーション モデルと MVP (パッシブ ビュー)
私はプレゼンテーション モデル パターンを学習しようとしていますが、プレゼンテーション モデルと MVP - パッシブ ビューの違いについて混乱してしまいました。具体的には、プレゼンテーション モデルがビューの代わりに同期を行う場合です。この質問は、この件に関する以前の質問の延長です。
Martin Fowler は彼のArticleで、Presentation Model が同期を行う可能性を提供しています。
ビューを参照するプレゼンテーション モデルは、通常、同期コードをプレゼンテーション モデルに保持します。結果のビューは非常にばかげています。ビューには、動的であり、ユーザーのアクションに応じてイベントを発生させる状態のセッターが含まれています。ビューは、プレゼンテーション モデルをテストするときに簡単にスタブ化できるインターフェイスを実装します。プレゼンテーション モデルはビューを監視し、適切な状態を変更してビュー全体をリロードすることでイベントに応答します。その結果、同期コードは、実際の UI クラスを必要とせずに簡単にテストできます。
プレゼンテーション モデルが同期している場合、MVP(Passive View) との違いがよくわかりません。パッシブ ビューに関する彼の記事では、同期を使用してビューを更新する例を示しています。
では、プレゼンテーション モデルがビューを参照する (および同期する) プレゼンテーション モデル パターンは、MVP (パッシブ ビュー) と同じではないでしょうか?