質問はトリッキーかもしれません (その性質または私の説明方法のため) ので、答える前にこれをよく読んでください。
私はこのアプリを書く必要があります:
a)デスクトップアプリ。
b) データベース、ファイル、またはその他のリポジトリという意味でのデータ層がない (データを保存、保存、またはロードする必要がない)。
c) アプリには、いくつかの計算アルゴリズムが実装されます (遺伝的アルゴリズム)。
b) アプリと計算結果のコントロールを表示する GUI を提供します。
MVCパターンを使おうと思っているのですが使い方に疑問があります。(たとえば)データベースの意味でのデータレイヤーがないため(データはユーザー入力に基づいて実行中に生成されます)、この実装でMVCを使用する方法が心配です。これまでのところ、私は2つのアプローチを考え出しました:
GUI はビューです。GeneticAlgorithm はコントローラーです。GeneticAlgorithmResults はモデルです (データのみを格納するクラスとして)。基本的な流れ:
- ビューはユーザー入力をコントローラーに送信します。
- コントローラーはユーザー入力を処理し、データを生成します。
- コントローラーは、生成されたデータをモデルに送信します。
- モデルは新しいデータについてビューに通知します。
- ビューは新しいデータを取得し、表示を更新します。
GUI はビューです。AppEngine はコントローラーです。GeneticAlgorithm と GeneticAlgorithmResults はモデルです。これで、次のようになりました。
- ビューはユーザー入力をコントローラーに送信します。
- コントローラーはユーザー入力を処理し、制御信号をモデルに送信します。
- モデルは内部状態を更新します (新しいデータを生成します)。
- モデルはコントローラに新しいデータについて通知します。
- コントローラーはデータをモデルにプルします。
- コントローラーはデータを処理します。
- コントローラーは、処理されたデータをビューにプッシュします。
- ビューは表示を更新します。
最初のアプローチはより簡単で、MVC に似ているようです。問題は、一部のロジックをモデルに含める必要があることです。すべてのデータ更新が表示されるわけではないため、モデルに通知するタイミングを決定するか、小さな変更ごとではなくデータのセットで表示が更新される可能性があります。これらの決定は、ユーザーの入力に基づいて行われます。さらに、実際に表示する前に、データの追加処理が必要になる場合があります。これはビューにあります。
一方、2 番目のアプローチはより複雑で、タスクを達成するために多くのメッセージが渡されているように見えます。ただし、コントローラーにロジックの完全な制御を与え、ビュー、コントローラー、およびモデルの責任を分離します (これが MVC の主な目的です)。
どのアプローチをお勧めしますか? それとも、それらを混ぜて、最初のアプローチのアーキテクチャを使用し、2 番目のアプローチからの通信フローを使用する必要がありますか? それとも違うデザイン?