yaakaito.org

MVCにpを挟んでMpVCにすれば結構うまくいくのではと考えてみたログ

Software

こんにちは!うきょーです! 誤解を生んでもあれなので最初に書いておくとただの戯れ言です。 もしかしたら僕が勘違いしているor知らないだけで、既存のものが当てはまっているかも知れないので、あったら教えてください。

クライアントアプリとか作るときに、大体の場合MVCパターンが付きまとうと思うんですが、 MVCってどうしてもどこかに(多分主にView)しわ寄せが発生してるよなー的な。

多分みんなModelを一番綺麗に保ちたいなーと思っているはずなので、 Modelのプロパティによってビューの表示が大きく変わる時に、どうしてもビューに if hogehoge みたいなことを書かないといけない。 入力必須のフォームに入力してなかったら赤になる、とかも突き詰めればそういう感じだと思うし、それをやった結果Viewが残念な状態になっていくわけですね、南無。

で、MVVMとか流行って?ますが、あれは相当意識を高く保たないと書き続けられないなーと思っていて、 チームとして運用していくことを考えた場合、常にそうにはなれないので、ちょっと微妙だなーとなってしまう訳です。

結局のところMVCが分かりやすいというか、説明も楽というか、多分一番触れやすいだろうなーというところが大きい。 んで、それでやっていくと、最初は大体うまく行くと思うんですが、残念ながら徐々に無念は生成されていきます。

そこでPMパターンとかMVPパターンというのがあるわけなのですが、これのP(resentaion|resentator)の部分をもっと単純なものにしてしまって、 最初っから無念をそこに集めればまあ、わりと長持ちするのでは、と考えてみた。

例えば上の例のフォームを赤にするみたいなのは、Pのレイヤーでもうform_backgroundとか作ってしまうイメージ。(実際にはやらないでくださいね。)

というか多分これって結構な人がやってるんじゃないかなーと思うんだけど、どうなんだろ。

実装的な話

Viewがレンダリングするときに、対応するModelを、Presentationでラップして使う、的な感じかな。 必要なのはレンダリングするときだと思うので、View <-> Model の紐付けとかは従来通りでよいのでは。 イベントのハンドリングみたいのもControllerがやる、あくまで出す時だけに焦点を絞る。

Presentationはもう負債を全部飲み込む勢いでいいと思う。そして分かりやすく残念な感じで書けばいい。 Presentaionはパターンの主体として存在させるものではなくて、単なる変換関数くらいに考える。

Viewに対するプロパティがModelの分と、Presentationが生んだ分とでかなり数が大きくなってしまうが、 それでもテンプレートにifと書いてあるよりは大分マシだと思う。

テストのことを考えたときも、これで少なくともModelとControllerは無念を見ずに単純なコードが書けそうな感じする。 レンダリングとかは単体テスト書いてる上では、言っちゃあ悪いがそこまで気を使う場所ではないと思うし、 逆にそこのテストはPresentaionをテストすることで大分楽が出来そう。

おわり

pを小文字にしたのはそこまで出しゃばってほしくない的な意味を込めてですかね。