基本レイヤ構成
前提と言い訳:一応、くーすとかgoyaとかその辺の設計をベースにおいてるつもり。理解不足なところがあるかもしれないけど。
Webアプリケーションにおける基本レイヤ構成を次のように考えてみる。
- クライアント層
- プレゼンテーション層
- サービス層
- ビジネスドメイン(ロジック)層
- インテグレーション層(DAO層)
- リソース層
このうち、クライアント層とリソース層は外部アクタとしてシステム開発のスコープ外なので中の4層に注目してみる。
ビジネスドメイン(ロジック)層やインテグレーション層(DAO層)は、層の役割としてそんなに解釈に幅はない気がする。
最近悩んでいるのがプレゼン層とサービス層の関係。
サービス層って、上の人(プレゼン層)と下の人(ビジネスドメイン層)を直接意識している特殊な層じゃないのか?
たとえば、あるサービスはビジネスロジックAを実行した後、画面Bに遷移させるとする。この場合、サービスは、ビジネスロジックAは当然のことながら、画面Bの存在も知っていることになる。たとえ「画面」というものを直接ファイルパスで表現せずに、画面ID(String)や、または、画面をユニークに特定するらかのオブジェクトで表現したとしても、とりあえずビューの存在を意識しているということには間違いない。というか意識しないとWebアプリケーションとしてのサービスが提供できない。
#他の層は基本的に上位層を意識する必要はまったくない。はず。(クライアント層とプレゼン層はちょっと微妙。)
で、そうするとMVCモデルにマッピングしたときにどうなるか?というのがちょっとわからない。
システムが提供するユーザ機能として考えると、
- Model=ビジネス層
- View=プレゼン層
- Controller=サービス層
と考えていいのだろうか?
当然プレゼン層フレームワークの中だけでも局所的なMVC構造があるんだけど、それはUIであるブラウザ上の表示と、ブラウザから送られるフォームを含むリクエストを統一的に制御するためのMVC構造であって、なんというかシステムが持つユーザ機能としてのMVCとはまた別のレベルの話に思える。
そこを無理に同一視しようとするからよくわからなくなる、ってことはないだろうか。
#正しくは、自分が混乱して勘違いしてるから、かな?