ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

モデルとビューに分ける

データを保持する部分と表示する部分がいっしょになっていると、表示方法を変えるときに変更するのが大変。あるいは見た目は変えずにデータの処理部分を変えるのも難しい。そこで、データを保持する部分と表示する部分を分ける。つまりModel View Controller(MVC)のモデルとビューに分けるということ。
リファクタリングの本では「観察されるデータの複製(Duplicate Observed Data)」という。観測される、つまり画面に表示されるデータがモデル側からビュー側に複製されるということ。

手順

モデルを表現するクラスを作成
ビュー側からモデルを参照
ビュー側からモデルのメソッドを使うように変更

コンパイルしてテスト。

通知の内容を表すイベントを宣言
通知を行うインタフェースを宣言
通知を受け取るメソッドをビューに宣言

コンパイルしてテスト。

モデルにビューを登録
ビューにモデルを登録
モデルを変更したらビューへ通知するコードを追加
ビューに通知を受け取ったら表示を更新するコードを追加

コンパイルして確認。
デザインパターンのObserverパターンを使ってモデルとビューに分けたテストプログラムを以前書いた。(id:toburau:20070823)
分離することは割とすぐにできるが、どうやって同期を取るのかが難しい。Observerパターンとイベントリスナーを使うとか。いまいちこのあたりに弱い。


参考文献:『Java言語で学ぶリファクタリング入門』