レイヤモデルアーキテクチャ
レイヤアーキテクチャの場合、ある層は、自分の直接下位の層にのみ依存し、それ以外の層には依存しないのが基本です。通信は、下位の層とデータをやり取りすることで行います。
それでは、このデータはどの層に属するのでしょうか。層に属することにすると、層間で通信するごとにデータをそれぞれの層のデータに変換する必要がでてきます。
例えば、A -> B -> Cという層間の呼び出しの場合、A層のオブジェクトはB層のデータに値を詰めてB層のオブジェクトを呼び出し、B層のオブジェクトは、B層のデータをC層のデータに変換して、C層のオブジェクトを呼び出します。戻り値の処理はこの逆です。B層のオブジェクトは、C層のオブジェクトの戻り値(C層のデータ)をB層のデータに変換して、戻り値として返します。かなり大変です。層が増えれば増えるほどこのオーバーヘッドは大きくなります。
そこで、データ部分は、どの層にも実装上依存しないようにしておくことで、すべての層を通過できるようにしたのが、レイヤモデル(データ部分)アーキテクチャの考え方です。
オリジナルはどこなんだとうざいことを言う人がいるかもしれないので、先に書いておくと、オリジナルがあるかどうかは分かりません。ただ、このように考えるとレイヤアーキテクチャがすっきり説明できるということです。
例えば、プレゼンテーション層、ドメイン層(説明を分かりやすくするためにビジネスロジック層ではなくドメイン層と書いています)、データアクセス層というレイヤがあって、ドメインモデルはドメイン層に属するということにすると、データアクセス層がドメイン層に依存することになり、レイヤアーキテクチャが成立しません。ドメインモデルをドメイン層から分離し、ドメインモデルはドメイン層に仕様上は依存するが実装上は依存しないようにして、すべての層を通過できるようにすることで、レイヤモデルアーキテクチャとしてすっきり説明できます。