ダイコン時代のシリーズ(2)

一通り、読ませていただきました。自分の理解力の問題で、かなりの消化不良を強引に読み進めましたが、結構為になったと思います。

とっても基礎の部分が身に付いていないのは痛いですね…。分からないなりに、設計と分析の方法論をまとめ。分からない所をハッキリさせるために。

レイヤ

レイヤって何だろう。直訳で「層」ですよね。でも明文化された定義を知らないです。
自分なりの解釈では、プログラムをいくつかの層に分けて、役割を明確にし、上層のはその直下のレイヤにのみ依存するように設計する、為の分割をしたもの?(もう日本語的にダメw) 層分けの対象がプログラムじゃなくて、通信プロトコルだったりすると、OSI参照モデルなんかがあったりしますやね。(とか例を挙げて誤魔化す始末)
で、アプリケーションレイヤの分け方で代表的なのが、以下の5層。(最後に紹介したサイトから引用)

ユーザーインターフェイス
ユーザーや外部システムから見える。ユーザーインターフェイスは、画面の描写や入力受け付けの制御、外部システムからの入力電文の受け付けなどを受け持ちます。
アプリケーション層
ユーザーインターフェイス層から利用される層であり、下位の層であるサービス層を利用します。アプリケーション層は、ユーザー入力値の検証や画面遷移の制御などを行います。
サービス層
サービスを実現するコントローラーの役割を持っています。サービスを実現するために、ドメイン層にあるビジネスロジックを利用して一連のサービスを実行していきます。サービス層ではトランザクションや分散性などの非機能要件を設計します。
ドメイン
複数のサービス層から利用されるビジネスロジックを設計します。ドメイン層は、データを永続化する必要があるので、下位のパーシステンス層を利用してデータベースにデータを永続化します。
パーシステンス層
RDBなどを利用して実際に永続化する機能を受け持ちます。

これが基本ですよね。で、UI, パーシステンス(永続化)というのは、単語の意味からだいたいどんなことをする層だか想像つくのですが、アプリケーション, サービス, ドメイン ってのが曖昧なんですよね。applicationはvalidationや画面遷移制御、serviceは非機能要件、domainはビジネスロジック…。

サービスって何だろう。何だろう…。
ドメインって何だろう。www.example.com みたいなのが一番に浮かんでしまう時点で失格でしょうか…。
ビジネスロジックって何だろう。「アプリケーションがおこなう処理やルール、その手順」とな。まぁ、アプリケーションの中枢でしょうか。

しかし id:szk-takanori:20070304#1173022251 によると、3層構成になっていますが…。

みたいな考え方でいいんでしょうか。あー、だめです、分からない…。

モデル

これがくせ者。まったく分かってないかも。MVCのなかの、モデル でいいんでしょうか。
「モデルとは、アプリケーションのデータをカプセル化して、そのデータを操作するメソッドを提供するオブジェクト」だそうです。
まぁ、Daoから返されるEntityとか、StrutsにおけるActionFromとか、TeedaにおけるPageクラスの事、でいいんですよね?

で、これがこう分類されたりする。

  • プレゼンテーションモデル
  • サービスモデル
  • ドメインモデル

それぞれ、どういうことだろうか。各層で一番扱いやすい、というか扱いたい形式になっているモデル、という感じでいいのかなぁ。

…。ズタボロです。良書、お勧めサイトなどありましたら、ご教授下さい。