どういう順番で作るのが正解なのかよく分かりませんが、私はだいたいModelから作り始めます。 理由は単純でModelは絶対必要だから。 他の要素、ViewModelだけで無く(GUI的な)Viewも絶対必要とは考えません。この時点ではConsoleアプリケーションから呼び出して使うつもりで作りはじめというわけで前回に引き続いてMVVMネタです。
今回はModelを作ります。
とりあえずModelから
どういう順番で作るのが正解なのかよく分かりませんが、私はだいたいModelから作り始めます。
理由は単純でModelは絶対必要だから。
他の要素、ViewModelだけで無く(GUI的な)Viewも絶対必要とは考えません。この時点ではConsoleアプリケーションから呼び出して使うつもりで作りはじめます。その方がテストが書きやすい(気がする)ので。
だいたい、それ以外の機能はView作ってみて機能が足りなかったらViewModelに押しつけりゃいいというのが私の考えです。(いい加減)
さくっとコーディング
Model作成の時点では特にMVVMパターンだからどうという作法はあまりないので好きに作ります。<おい
というわけでVisual StudioでWPFアプリケーションを作成して下記のクラスを追加しました。
Model.cs
DetailModel.cs
明細モデル(ただのデータオブジェクトですが)のコレクションと注文の操作を持つModelですけど長いよ・・・。
普通に何も考えずに書くときとの違いは、Modelの操作によってプロパティが更新された際にViewModelに通知する事を考えて、INotifyPropertyChanged
を継承していることと同じくコレクションの変更を通知できるようにList<T>
ではなく、ObservableCollection<T>
を使っているところでしょうか。
ただまあ、このパターンだと操作した結果、値が変わるような事は無さそうなのでアレですが。
Consoleアプリで実行
Model単体では実行できないのでConsoleアプリを作って実行してみます。
ソリューションにConsoleアプリケーションのプロジェクトを追加して、先ほど作ったWPFプロジェクトを参照に追加します。
そこに先ほど作ったModelを呼び出すコードを追加します。こんな感じ。
Program.cs
で、おもむろに実行。出力は以下のようになりました。
まあ、さすがにちゃんと動いてるようですね。
今回は単純なModel&手を抜いてConsoleアプリで実行してますが、実際にはNUnit等でちゃんとしたテストを書いてJenkinsで実行するといいと思います。というかしましょう。私含めて。<やってないのかよ
特にリグレッションテストってある日突然情熱に目覚めて、やろう。と思ってもいざやると機能を追加する度にやることが加速度的に増えて心が折れがちです。
なのでロジックの部分をあらかじめテストしやすいように作るのが大事なんだと思います。
というところで今回はここまで。次回はViewModel・・・をすっ飛ばしてViewを作ろうと思います。