質問は難しいかもしれません(その性格や記述方法のため)。データ層のないデスクトップアプリケーション用のMVC
私はこのアプリを書いています:
a)desktop app;
b)データベース、ファイル、または他のリポジトリの意味でのデータレイヤーがない(データの保存、保存、ロードの必要はありません)。 c)appにはいくつかの計算アルゴリズムが実装されています(Genetic Algorithm)。
b)は、アプリケーションと計算結果のコントロールを表示するGUIを提供します。
私はMVCパターンを使用することを考えていますが、使用方法は疑問です。私はデータベース(例えば、ユーザの入力に基づいて実行中にデータが生成される)の意味でデータレイヤーを持たないので、この実装でMVCを使用する方法について懸念しています。これまで私は2つのアプローチを思いついた。
GUIはビューです。 GeneticAlgorithmはコントローラです。 GeneticAlgorithmResultsはModel(データのみを格納するクラス)です。基本フロー:
- ビューは、ユーザ入力をコントローラに送信します。
- コントローラはユーザー入力を処理しており、データを生成しています。
- コントローラは生成されたデータをモデルに送信します。
- モデルは新しいデータについてビューに通知します。
- ビューは新しいデータをプルし、表示を更新します。
GUIはビューです。 AppEngineはコントローラです。 GeneticAlgorithm nad GeneticAlgorithmResultsはモデルです。今度は:
- ビューはユーザー入力をコントローラーに送信します。
- コントローラはユーザ入力を処理しており、制御信号をモデルに送信しています。
- モデルは内部状態を更新します(新しいデータを生成します)。
- モデルはコントローラに新しいデータについて通知します。
- コントローラはモデルにデータをプルします。
- コントローラはデータを処理します。
- コントローラは、処理されたデータをビューにプッシュします。
- ビューで表示が更新されます。
最初のアプローチは、より簡単でより多くのMVCのようであるように思われます。問題は、いくつかのロジックがモデルになければならないということです。すべてのデータ更新が表示されるわけではないため、モデルに通知するかどうかを決めるか、少しずつ変化するわけではありません。これらの決定はユーザーの入力に基づいて行われます。さらに、実際の表示の前にデータの追加処理が必要になることがあります。これはビューに表示されます。
一方、第2のアプローチは、より複雑で、多くのメッセージがタスクを達成するために渡されているように見えます。しかし、それはコントローラへのLogicを完全に制御し、View、Controller、およびModel(MVCの主な目的)の責任を分けます。
どのアプローチをお勧めしますか?あるいは、私はそれらを混ぜ合わせて、第2のアプローチからのコミュニケーションの流れと最初のアプローチアーキテクチャを使用するべきでしょうか?またはいくつかの異なるデザイン?