質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

2回答

2092閲覧

MVCについて

mightyMask

総合スコア143

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

2クリップ

投稿2017/02/23 18:45

MVC(Model View Controller)について調べましたが、いまいちピンと来ません。
PC上のJVMで動くjavaのGUIアプリケーションゲームを開発することを考えます。

MVCを意識して作るのならば、まずModel, View, Controller という3つの大きなパッケージを作成してしまう感じでよろしいのでしょうか。

そしてそれぞれの役割ですが、
Modelは、ソフト内部のロジック処理を担当する。
これはおおよそあっていると思うのですが、ViewとControllerについての説明がなかなか難しくて私には理解し難く、サイトによって説明がまちまちな気がします。

Viewで画面やBGMなどの出力処理、Contorollerでキー入力やマウス入力などの入力処理をすると言った説明もあれば、
Viewは入出力処理を行い、ControllerはViewとModelの橋渡し役であると言った説明もある気がします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

(A)Viewで画面やBGMなどの出力処理、Contorollerでキー入力やマウス入力などの入力処理をすると言った説明もあれば、

(B)Viewは入出力処理を行い、ControllerはViewとModelの橋渡し役であると言った説明もある気がします。

MVCの実装は「必ずこうでなければならない」という程厳格なものではないのが説明に若干のブレを生じている理由だと思います。

SmallTalkでの例がwikipediaに載っていますね。これを見るとSmallTalkではマウスやキーボードのイベントは画面上へのGUI表現を担うViewクラスではなくControllerクラスに配送される仕組みであることが伺えます。最初にMVCが提唱されたのがSmallTalkだったので元々こうした仕組みのことを指していたのだろうと思います。

Javaのswing/JavaFXのクラスの機能を概観すると似た雰囲気ですが若干見え方が違うように感じる部分もあります。イベントは普通Controllerが受け取るのではなく「View内部へ自動的に通知される」仕組みに見えます。これは単にSmallTalkの仕組み「イベントをControllerで受け取りViewとやりとりしながらGUIへの反映をする」という若干複雑な制御をするよりは「Viewが典型的なイベントの制御をある程度やった上でアプリケーションプログラマーが興味を持つようなコールバックをControllerに対して行う方が簡潔な設計になる」という理由なのだと思います。

ViewとControllerはSmallTalkで言えば(A)になるでしょうし、Javaのswing/JavaFXに当てはめると(B)のような説明の方が感覚的に一致するでしょう。

ではSmallTalkとJavaではMVCは全然違うものかといえば、そうでもなく以下のようなMVCの概念を用いると本質的な課題を解決するための手段と捉えることができると思います。ここでいう課題とは「画面を表現するコードと何か起こったとき画面やデータを変更する設計が入り混じってしまい複雑すぎて初期設計や設計変更が大変」を指します。

  • Model

画面上の表現やGUI操作仕様とは独立して設計しViewやControllerを置き換えても依然として有用な抽象的なデータ機能を持つように設計しよう

  • View

画面上への表現を担うことが主たる役割。アプリケーション独自の論理を入れこまないようにすることで機能をとらえやすくし、Modelの設計変更をしなくても見た目だけを独立に設計・変更できるようにしよう。

  • Controller

ModelとViewをアプリケーションが行うべき振る舞いとなるように「しかるべき制御を行う」もの。ここはアプリケーションごとに作るのはしかたない。(アプリケーション間で流用できる共通的な制御もなくはないと思います。そうした場合はViewと合わせてカスタムコントロールとして部品化できる場合もあると思います。そうなると最早ControllerではなくViewの一部になる気がします)

投稿2017/02/24 00:16

編集2017/02/24 00:43
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

モデル・ビュー・コントロール(MVC)モデルでは、3つの機能別にオブジェクトをとらえて、それぞれを別々に開発し、お互いに反応させるようにします。それにより、開発者の役割分担を明確にすることができ、細かい手直しを施すときも、作業が簡単で意外な影響を予防できたりする利点が生まれるのです。
添付図のようなレストランの仕事に例えれば、調理師とフロア係と店長がそれぞれの持ち場で役割をうまくこなして業務を進めていくようなイメージです。
イメージ説明
Java言語の環境で一般的なJSPにおいて、モデルがSQLデータベース等を操作するJava Beans、ビューがHTMLを拡張したような形式のJSP、コントローラがJava Servretにあたります。

投稿2017/02/23 21:58

編集2017/02/23 22:00
seastar3

総合スコア2285

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問