今回はボタンを押した回数だけを記録するので、シンプルです。this._count;}}}キモとなるのが、countの値をsetで設定したときにイベントを発行するところです。"MySugoiEvent";などと自分でイベント名を定義したり、カスタムイベントを別で作ってそれを、値変更時にdispatchすることも可能です。ViewControllerViewControllerはControllerの一種です。Viewをコントロールします。iOSのUIKitというフレームワークで使われていた名前で、気に入って使っています。今回はViewというプロパティを持つだけでしたが、これにprotected、publicのメソッドを追加してテンプレート化して使うのもよいと思います。各ViewControllerはこれを継承して使います。継承しているのでviewという値を常に持ちます。他から使いやすくなります。ViewController(){}}}入力用のViewとViewController画面左上の+ボタンのViewとViewControllerです。0.5;}}}+ボタンのViewは特にModelやControllerの参照をもっていません。おしている間だけ薄くなって表示するクラスです。CountButtonView;}}}コンストラクタにModelの参照を渡します。中で自分に関係あるViewを作成します。ボタンが押されたらModelの値を書き換えます。値が書き換えられたあと、どう表示されるのかはこのクラスは知りません。いうことは逆に言えば、どうやって表示されるかに変更が入ったとしても、このクラス自体に変更が入ることはないということです。入力方法が変わった、例えばボタンを押すのではなくて、スライダーで値が変えるようになったというのであれば、このクラスを修正する必要があります。countData.count.toString(10);}}}Modelの値をTextFieldで表示します。他の参照は保持していません。}}Modelの値変更イベントを監視して、変更があったらそれをViewに伝えます。updateでModelの参照を渡しているだけで、それがどう表示されるかはControllerは知りません。いうことは、Viewが赤い文字で表示することになっても、すんごく大きなフォントサイズになったとしても、このControllerにとってはどうでもいいことで、ModelとViewのパイプ役に徹していればよいのです。CountDisplayViewController(_countData);this.addChild(_countDisplayViewController.view);}}}各ModelとViewControllerを作ってまとめています。各ViewControllerが継承してくれているおかげで、特別そのクラスを調べなくてもviewをaddChildできています。ここまでのまとめ「なんだかボタン押した数を表示するだけなのに、すんごく面倒くさくなってるんですけどー!」というふうに思う場合もあるかと思います。その意見はある意味で正しいです。実際このアプリにMVCはオーバースペックなのです。そのときにMVCにきりわけてあると、影響の出る範囲が非常に狭くなり、開発もやりやすくなります。いまは数字で表したのですが、カウントが増えるごとに、円を描画するようにしてみます。円を描画するようにする完成イメージ。(実際に動作します)+ボタン横のきりかえボタンで変わります。20);g.endFill();}}}}引数のCountDataに応じて円を描画します。表示用のControllerを修正ViewControllerは複数のViewをもつことが可能です。さきほどの円を描画するクラスや表示切り替えボタンを中に持たせます。}}最後のまとめ今回値に応じて円を表示するように仕様を変更しました。その際修正をしたクラスは、表示用のControllerと新規に作成したCountDisplayCircleViewの2つだけでした。文字で表示するCountDisplayTextViewも変更はありませんでした。その他のModelや入力用のViewやViewControllerにも全く影響がでませんでした。他のことを気にすることなく、開発をすることができました。あと今回はViewとViewControllerを入力用と出力用にわざわざわけました。規模に応じてひとつのViewやViewControllerの中で入出力の機能を含んでもよいと思います。ViewとControllerの機能だけはしっかり切り分けるとして。Java言語で学ぶリファクタリング入門という本に書いてあったのですが、「クラスを分ける粒度は、分けるクラス数が多すぎては管理が大変になるし、少なすぎてはクラスの責任が重くなりすぎてソースを理解するのが大変」ということでした。バランスよく分けたいです。あとは画面遷移をともなう場合、タイトル画面、編集画面、ゲーム画面などは、それぞれにViewとViewControllerをもたせてあげるときりわけがスッキリすると思います。次回はもう少し実践的なTodoアプリを作ってみたいと思います。今回のプロジェクト一式です。LINEスタンプ作りました!毎日使える。パッケージ名を確認する。プログラミングこのブログについてこんにちは。フロントエンドエンジニアです。自作のiPhoneアプリを作っています。