基本レイヤ構成

前提と言い訳:一応、くーすとかgoyaとかその辺の設計をベースにおいてるつもり。理解不足なところがあるかもしれないけど。

Webアプリケーションにおける基本レイヤ構成を次のように考えてみる。

  • クライアント層
  • プレゼンテーション層
  • サービス層
  • ビジネスドメイン(ロジック)層
  • インテグレーション層(DAO層)
  • リソース層

このうち、クライアント層とリソース層は外部アクタとしてシステム開発のスコープ外なので中の4層に注目してみる。

ビジネスドメイン(ロジック)層やインテグレーション層(DAO層)は、層の役割としてそんなに解釈に幅はない気がする。

最近悩んでいるのがプレゼン層とサービス層の関係。

サービス層って、上の人(プレゼン層)と下の人(ビジネスドメイン層)を直接意識している特殊な層じゃないのか?

たとえば、あるサービスはビジネスロジックAを実行した後、画面Bに遷移させるとする。この場合、サービスは、ビジネスロジックAは当然のことながら、画面Bの存在も知っていることになる。たとえ「画面」というものを直接ファイルパスで表現せずに、画面ID(String)や、または、画面をユニークに特定するらかのオブジェクトで表現したとしても、とりあえずビューの存在を意識しているということには間違いない。というか意識しないとWebアプリケーションとしてのサービスが提供できない。

#他の層は基本的に上位層を意識する必要はまったくない。はず。(クライアント層とプレゼン層はちょっと微妙。)


で、そうするとMVCモデルにマッピングしたときにどうなるか?というのがちょっとわからない。
システムが提供するユーザ機能として考えると、

  • Model=ビジネス層
  • View=プレゼン層
  • Controller=サービス層

と考えていいのだろうか?

当然プレゼン層フレームワークの中だけでも局所的なMVC構造があるんだけど、それはUIであるブラウザ上の表示と、ブラウザから送られるフォームを含むリクエストを統一的に制御するためのMVC構造であって、なんというかシステムが持つユーザ機能としてのMVCとはまた別のレベルの話に思える。

そこを無理に同一視しようとするからよくわからなくなる、ってことはないだろうか。
#正しくは、自分が混乱して勘違いしてるから、かな?