投稿者 YuO  (社会人) 投稿日時 2012/5/14 12:25:26
> 申し訳ないですがM,とかVとかPなるものの意味から解らないのです。
> どれが処理にあたり、どれがGUIになるのでしょうか?

PMで大雑把に言うなら,
・見た目がV
・「見た目に付随する処理」や「Vのためのデータ」がP
・上記以外全てがM
です。
以前るきおさんが書かれていたPLはPに,BLはMに記述します。


> MODEL
> 主にデータの操作(取得,更新,削除など)を行うためリソース(DB,外部APIなど)にアクセスし処理を行う部分。
> VIEW
> クライアントにUIを返却する部分。画面デザインなどを担当する。

上記のVの表記はWebアプリケーション用のMVCあたりの表記だと思うのですが……。
UIを「返却する」といった考えはないですよ。UIそのものです。
あと,ステートレスなHTTPの世界と違って,クライアントアプリケーションはステートフルな世界です。
なので,Mの書き方も当然Webアプリケーションとは異なってきます。


> ではYuOさんなら僕の書いた例題はどう書かれるのですか?

このサイズではコードビハインドの方が楽なんですよね。
処理が小さすぎて,分離するコストが高くつきすぎます。
あえて分離するなら,単純にV-M構成にしてしまうでしょう。
# 特定の場合は文字を赤くする,といったビューロジックが不要であるため。

まずはModelから。
非常に長くなったため,ideoneの方に書いておきました → http://ideone.com/KBtyO
一応,WinFormsに依存しないプログラムにしているため,このModelはWPFでも使えるはずです。
注)文法チェックすらしていませんので,そのままではコンパイル不可の可能性があります。

次に,Form。
ProgressBar1.ValueをCurrentに,ProgressBar1.MaximumをMaxValueにデータバインドするように設定しておいて (DataSourceとしてModelDataBindings1ができているとして),
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        ModelDataBindings1.DataSource = New Model()
    End Sub
End Class
とだけ書きます。
デザイン画面での設定が面倒ですが,今回はビューロジックが無いため,コードビハインドは上記のみになります。
実際には,New Model()を直接BindingSource.DataSourceに代入するようなことはせずにフィールドにPやVMを持たせて,
ボタンクリック等でメソッド呼び出しを行うコードビハインドが必要になると思いますが。


> るきおさんはクラスとクラスをイベントで連携するのは正しい判断と言っておられますが・・・

依存関係を片方向にするためにイベントを使うのは正しいやり方です。
システムに組み込まれたObserverパターンがイベントです。

VはPが変化したことをイベントを通じて知ります。
このために特化したInterfaceがSystem.ComponentModel.INotifyPropertyChangedです。
また,.NET 1.0以来の方法で,「プロパティ名 + Changed」というイベントを用意して知らせることもできます。
どれも,「変化したこと」を知らせるイベントで,変化した値はPにアクセスして知ることになります。
# Pのプロパティをコントロールのプロパティに割り当てて,同一視するための方法がデータバインディング。


> >言い換えれば,MのインターフェースをV (またはC/P/VM) が知っていないといけないのです。
> これはMの処理をInterfaceクラスでVに提供するって事なのですか?

ここでいう「インターフェース」は言語としてのInterfaceではなく,一般名詞としてのインターフェースです。
Mをどういう風に扱う必要があるか,Vが知っていないといけない,と書いています。