[解決済み] Qtはなぜモデル/ビューという用語を間違って使っているのか?
質問
Qtのモデル/ビューコントロールで使われている用語は欠陥があると思います。以下のように の説明ページで では、ビューとコントローラを統合することでMVCをMVに単純化したと述べており、次のような図を示しています。
しかし私は、彼らはオブジェクトの役割の名前を間違えた、と思っています。
- コントローラをマージしたViewと呼ばれているものは、実際にはViewのみです。
- Modelと呼んでいるものは、実はControllerだけです。
- もし本当にモデルを持ちたいのであれば、それは彼らの "Data"がある場所でしょう。
私は、あなたのアプリでQtのモデル/ビューコンポーネントを使用する、通常で正常な方法について話しています。 以下はその理由です。
- これは典型的なQtコンポーネントであり、オブジェクトに固有のコントローラロジックを追加することなく、そのまま使用されます。)
- 行数、列数、データなど、モデルとは関係のないいくつかのQtメソッドを実装しなければならないので、これはほとんどモデルとは言えません。実際、典型的なモデルメソッドはControllerの中にあります。もちろん、コントローラ と モデルロジックを実装することもできますが、まずコードデザインが悪くなりますし、ControllerとViewではなくControllerとModelを統合することになるので、ControllerとViewを統合することになります。
- 理由2.で述べたように、もしモデルロジックを分離したいのであれば、それはきっと写真の青いボックスではなく、破線の "Data"ボックス(もちろん実際のデータに通信する)でしょう。
Qtの用語がおかしいのか、それとも私が理解していないだけなのでしょうか?(ところで、なぜ学術的な質問でないかというと、私は彼らの命名に従って私のプロジェクトをコーディングし始め、すぐにそのコードが明らかに正しくないことがわかったからです。私は彼らがモデルと呼ぶものにモデルロジックを入れようとしてはいけないと気づいたのは、そのあとでした)
どのように解決するのですか?
Qt の命名が誤解を招くものであることに同意します。しかし、私の考えでは、この問題は Qt のみの問題ではなく、以下の原則を遵守することを可能にするすべてのフレームワークが共有しているものです。 懸念事項の分離 の原則を守って UI を実装するすべてのフレームワークに共通する問題です。誰かがそのようなフレームワークを考え出し、「ものごと」を分離しておく良い方法を見つけると、彼らは常に「モデル」と呼ぶモジュールと「ビュー」と呼ぶモジュールを持つことを義務付けられるように感じます。長年にわたり、私はこれらのフレームワークと一緒に仕事をしてきました。
- MFC
- Qt
- スウィング
- SWT
- MVVM による WPF
これらのフレームワークで「モデル」と「ビュー」という用語がどのように使用されているか、また、「ビュー」、「モデル」、「コントローラ」(もしあれば)のクラスがどのような責任を負っているかを比較すると、非常に大きな違いがあることに気づくでしょう。あるフレームワークから別のフレームワークに乗り換える人が正気を保てるように、異なる概念と用語の比較があれば確かに便利ですが、それには多くの作業と調査が必要です。良い読み物は、Martin Fowlerの 概要 .
さまざまな考え方があるので、どのような は MVC パターンはどのように見えるのか、どれが正しいのでしょうか?私の考えでは、MVC を発明した人たちに、MVC がどのように実装されることになっているのか、正しく理解する必要があります。その中で スモールトークの原論文 と書いてあります。
<ブロッククオートビューは、ビットマップディスプレイのアプリケーションに割り当てられた部分へのグラフィックおよび/またはテキスト出力を管理します。コントローラはユーザーからのマウスやキーボードの入力を解釈し、モデルやビューを適宜変更するよう命令します。最後に、モデルはアプリケーションドメインの動作とデータを管理し、その状態に関する情報の要求(通常はビューから)に応答し、状態を変更する指示(通常はコントローラから)に応答します。
それを踏まえて、私はあなたの3つの主要な懸念にこう答えます。
- 実際、Qt コンポーネントは "manages the graphical [...] output" and "interprets the mouse and keyboard inputs" なので、上記の定義に関しては、確かにビューとコントローラーを統合したものと言えるかもしれません。
- 私は、あなたが (再び上記の定義に関して) Controller と Model をマージすることを余儀なくされている/されることに同意します。
- またまた、同感です。モデルは アプリケーションドメイン . これは、"data"と呼ばれるものです。明らかに、たとえば行や列を扱うことは、通常、私たちのアプリケーション ドメインとは何の関係もありません。
私たちをどこに置いていくのでしょうか。私の考えでは、Qtのモデルやビューという用語が使われているときの本当の意味を理解し、Qtでプログラミングしている間はその用語の使い方をするのがベストだと思います。Qt のセットアップ方法はエレガントなデザインを可能にし、それは彼らの間違った命名規則よりも重要です。
関連
-
[解決済み] SOFEAとは?
-
[解決済み] MVPとMVC、その違いは何ですか?
-
[解決済み] MVCとMVVMの違いは何ですか?[クローズド]
-
[解決済み] モデルデータや振る舞いをどこに置くか?[tl; dr; サービスを利用する]
-
[解決済み】djangoのビジネスロジックとデータアクセスの分離
-
[解決済み】DTO(Data Transfer Object)とは何ですか?)
-
[解決済み] オブザーバー、Pub/Sub、データバインディングの違いについて
-
[解決済み] MVC」の「Controller」には何が入っているのか?
-
[解決済み] MVCとN層アーキテクチャの比較
-
[解決済み] MVCはデザインパターンかアーキテクチャーパターンか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン