最近Androidプログラミングの勉強をしています。ある程度分かってきたので定番の電卓アプリを作ってみました。

Activityをextendsしたクラスに全てを詰め込んだ書き方で動いたので良し良しと思っていたところ、偶然AndroidでもMVCすべきという趣旨のサイトを見つけました。

数十年前にSmalltalkが流行ったころMVCの勉強をしたのですが当時は頭が受け付けませんでした。久しぶりにAndroidにどう適用できるかチャレンジしたところ嘘のようにあっさりプログラムができてしまいました。

Modelは電卓の内部情報を管理するクラス、Viewは電卓の表示を行うクラス、ControllerはGUI上のボタン操作を管理するクラスで、Controllerは自然とActivityをextendsしたクラスになりました。

ユーザーがGUI上のボタンをクリック→ActivityをextendsしたControllerクラスのonClick()メソッドが呼び出されその中でどのボタンがクリックされたかをModelに通知→Modelは内部状態を変更した後、Modelに変更があったことだけ(どのようにViewを書き換えるかの情報は含まない)をViewに通知→通知を受けたViewは自らModelの内部状態を調べて情報に基づき表示を変更

という流れになりました。3つのクラスに機能が分離されすっきりしたと思います。