今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

Webアプリケーション内のMVCアーキテクチャ

twitter とか(もちろん自分のTL)で MVC アーキテクチャのことが話題になってるみたいなので、ちょっとメモ程度のことを書いておく。
まず、ここで言及してるのは、MVC2アーキテクチャのことではないので念のため。

Webアプリケーションは、一般的に三層アーキテクチャを採用する。プレゼンテーション層、サービス層、データアクセス層の3つ。でも、これはMVCアーキテクチャとは異なる。
Webアプリケーションでのコア部分はサービス層である。サービス層でWebアプリケーションで提供するサービスをきちんと構築するには、サービス層の中に MVC のうちの、少なくとも Model と Controller が必要になる。
プレゼンテーション層はまさしく View にあたる部分だけど、サービス層の中に View というか、UML で言うところの Entity・Boundary・Controller のうちの Boundary を用意して、プレゼンテーション層では Boundary を通して応答データを生成する方が冗長だけどより安全かもしれない。
データアクセス層ってなにかというと、サービス層を永続化するための Controller と考えるのがいいんじゃないかと。サービス層を永続化するのに RDB を使うのが一般的だけど、ものによってはプレインテキストでもいいわけだし、XMLでもいいわけだし。そして、永続化されたデータというのは、実はサービス層の View である。
あと、O/Rマッパーによって RDB から復元されたオブジェクトをそのままの状態で Model と言うのはほぼダメだと思う。Model とすべきクラスには、なんらかの振る舞いが存在するはずであって、例えば O/Rマッパー で復元したクラスを継承するなり委譲するなりして、振る舞いを持った Model があるべきじゃないかと。多くの場合、Model は単なるデータホルダーじゃないだろうだから。
MVCアーキテクチャとは、クラスやコンポーネントMVC のうちのどの責務を与えるかを明確にするアーキテクチャのことだ。Model の層が O/Rマッピングしてるだけで薄いなんてのは単なる検討不足で、本来あるべきの Model の振る舞いを、何も考えずに Controller に押し付けた結果じゃないのかなーと思った。


あー、ちょっとだけのつもりが30分もかかってしまった。