TL;DR

内容

レイヤードアーキテクチャ

レイヤードアーキテクチャでは、コードを次の層に分ける。

  • コアドメインまたはビジネスロジックの層
  • データベースの層
  • サービスの層
  • API または UI の層(またはその変形)

この構造は、「一緒に変更されるコードは、一緒に配置されるべき」という設計原則を破っている。各層が水平方向に組み立てられているので、ワークフローの動きを変えると、すべての層に手を入れる必要がある。

そこで、垂直方向のスライスに切り替えるとよい。各ワークフローに、その仕事を果たすすべてのコードを含める。要件が変わったら、そのスライスのコードだけを変えればよい。

しかし、ワークフローを横方向のパイプにしても、層が複雑に絡み合ったままでは、ロジックを理解したりテストしたりするのが不必要に難しくなる。

オニオンアーキテクチャ

オニオンアーキテクチャ(クリーンアーキテクチャ、ヘキサゴナルアーキテクチャ)では、ドメインコードを中心に置き、その周りに他の側面を配置する。各層は内側の層にだけ依存し、外側の層には依存しない。I/O の扱いはI/O を端に追いやるで扱う。

キーワード