MVCでは、プログラムを3つの要素、
Model(モデル)、View(ビュー)、Controller(コントローラ)に分割する。
そのアプリケーションが扱う領域のデータと手続き(ビジネスロジック - ショッピングの合計額や送料を計算するなど)を表現する要素である。
また、データの変更をviewに通知するのもmodelの責任である
(modelの変更を通知するのにObserver パターンが用いられることもある)。
多くのアプリケーションではデータの格納に永続的な記憶の仕組み(データベースなど)が使われている。
MVCの概念では、データの(UI以外の)入出力は取り扱わないので、
データアクセスも本来MVCの概念の範疇を超えるものではあるが、敢えていえばmodelの中に隠蔽されると考えられる。
modelのデータを取り出してユーザが見るのに適した形で表示する要素である。
すなわちUIへの出力を担当する。
例えば、ウェブアプリケーションではHTML文書を生成して動的にデータを表示するためのコードなどにあたる。
ユーザの入力(通常イベントとして通知される)に対して応答し、それを処理する要素である。すなわちUIからの入力を担当する。
modelとviewに変更を引き起こす場合もあるが、直接に描画を行ったり、modelの内部データを直接操作したりはしない。
なお、UIにおける入力と出力は本質的には不可分なものであり、したがってviewとcontrollerはいつでも分離できるとは限らない。
このようなM-VCとなるような構造を拡張MVCと呼ぶことがある。