DDD でのレイヤードアーキテクチャの例
レイヤードアーキテクチャにおけるレイヤーとはなんだろうか。当たり前のようにレイヤーという言葉を使い、ソフトウェアをレイヤーとして分割しているが、レイヤーとなるものとそうでないものの違いはなんだろうか。何をもってレイヤーと呼ぶのだろうか。
レイヤードアーキテクチャのレイヤーについては POSA: Pattern-Oriented Software Architecture, A System of Patterns の [POSA] Layers に書かれている。
抽象度によって分割し、あるレイヤーがその直接の下位レイヤーを利用する、というのが Layers の構造である。
抽象度によって分割されたものをレイヤーと呼ぶと考えて良さそうである。
レイヤードアーキテクチャのレイヤーとは機能を抽象度によって分割したものである。
古典的な
4層の場合はプレゼンテーション層→アプリケーション層→データアクセス層という主な処理順がありつつも、アプリケーション層はビジネスロジック層を呼び出していたり、データアクセス層はドメイン層のドメインオブジェクトを返したりしている。
また最近では Clean Architecture で主張されるようにビジネスロジックを中心として、データアクセス層は DIP で依存関係を逆転させている。
アプリケーション層やデータアクセス層からドメイン層を参照していて、ドメイン層は処理順からも外れていて、もはやレイヤーとは言えないのではないだろうか。
レイヤー(層)は上下に積み重なっている様のメタファーであるのに、それを満たさないものをレイヤーと呼ぶのは不適切だろう。
ソフトウェアを責務で分割する際に分割したそれぞれの部分を何と呼ぶべきだろうか。
思い浮かぶのはソフトウェア的な用語だとモジュール、コンポーネント、部分という意味からだとパート、セクション、セグメントがある。
<aside> 💡 モジュール(module)とは - IT用語辞典 e-Words https://e-words.jp/w/モジュール.html
</aside>
モジュールとは、機能単位、交換可能な構成部分などを意味する英単語。機器やシステムの一部を構成するひとまとまりの機能を持った部品で、システム中核部や他の部品への接合部(インターフェース)の仕様が明確に定義され、容易に追加や交換ができるようなもののことを指す。