WPFとMVVMについて雑に理解する(まずはパラダイムを理解する)

あーそーゆーことね完全に理解したとなったので記憶が新しいうちに記事にする。
例えが比較的Java EEを使用した大規模開発経験者向けかもしれないのはご容赦ください。

この記事で使用する単語の意味

例えに使う言葉は割愛。
WPFWindows Presentation Foundationの略。デスクトップ クライアント アプリケーションを作成する UI フレームワーク。(さすがに書かなくてもいいかと思いつつ念のため。)
MVVM:Model-View-ViewModelの略。WPFを使用する際に推奨されるデザインパターン。ちなみに、Model-View-Controller (MVC)の派生とのこと。
XAML:Extensible Application Markup Languageの略。ユーザーインターフェースを定義するためのXMLベースの言語。ちなみに、ザムルと読むそうです。

WPFとMVVMについて図にしてみた


それぞれ少しずつ補足していきます。

  • 表示に関する部分は全部Viewで完結させるよ。
    • WPFの場合、それはXAMLで表現するよ。
    • 図にも書いたけどxaml.csには原則何も書かないでね!
  • ViewModelは表示に関するロジックとModelの情報をView用に加工するロジックを受け持つよ。Viewに向けたイベント通知もDispatcherを介してやるよ。
    • Dispatcherはメッセージキューのようなものと思って間違いなさそう。
  • Modelはドメインに関する情報、要はデータモデルとか定義ファイルとかそれらを処理するための表示に関わらないロジックとか広い範囲を受け持つよ。
    • クライアントアプリの場合、ViewとModelの切り分けが難しそうではあるけど切り分けられないことはないはず?
    • 実際にアプリを作るときはDBや定義ファイルの読み書きを直接扱う部分とロジック部分は層を分けて考えたほうがよさそうだね!

J2EEのモデルでいうとViewがクライアント層、ViewModelがプレゼンテーション層(JSPサーブレット)、Modelがそれ以外といった感じでしょうかね。

ついでにスレッドについて

詳細なことは(ちゃんと調べてないので)割愛しますが、WPF周りの調べ物をしているとスレッドに関する話題が出てくるので少しだけ。
GUI保有するプログラムは基本的にマルチスレッドになっています。
WPFの場合、特に意識はしていませんが画面表示に関する部分専用のスレッドとUIを管理する(要はユーザからの入力を受け付ける)スレッドの二種類があります。
後者のことを少なくともC#+WPFの界隈ではUIスレッドと呼ぶようです(C#以外のウェブページだとGUIスレッドとか書いているところもあります)。
通常、UIスレッドはメインスレッド(起動時のスレッド)ですが、別スレッドを立てる場合もあります。

参考

むずかしくないWPF - Qiita
このページのおかげでビビっときました。
C#の便利な機能についての備忘録 - Qiita
» [WPF] MVVMパターンについて -入門編- 技術ブログ
MVVMそれぞれの位置づけはこの記事達のおかげでわかりました。

WPF とは何ですか? - Visual Studio | Microsoft Docs
Windows Presentation Foundation | Microsoft Docs
詳細設定 (Windows Presentation Foundation) | Microsoft Docs
WPFの理解という点ではMicrosoft Docsはイマイチでした。
(記事そのものがイマイチなのか機械翻訳だからなのかは何とも言えないところですが、今読み返してもそもそものパラダイムの説明がすっぽ抜けている気がするのでそのせいかと……。)
ただ、詳細なところまで書いてあるのでパラダイムが頭に入った後に読み込めば有用かと思います。たぶん(まだちゃんと読んでない)。

記事を書いていたらMVVMの責務がよくわかんなくなってきて追加で調べました。やっぱりアウトプット大事。
MVVMを勉強するときに参考になったリンク集 & 概要まとめ - Qiita
MVVMパターンの常識 ― 「M」「V」「VM」の役割とは?(1/5) - @IT