LoginSignup
0
1

More than 1 year has passed since last update.

はじめに

DDD(ドメイン駆動開発)を学ぶにあたって避けては通れないレイヤードアーキティクチャの概略を簡単にまとめました。※初めてアーキテクチャを学ぶ初心者です。

3層アーキテクチャ(一般的なアーキテクチャ)

三層アーキテクチャ.png

  • プレゼンテーション層 = クライアントとの入出力をする層
  • ビジネスロジック層 = ビジネスロジックの表現をする層
  • データアクセス層 = データベースとの入出力をする層

問題点

ビジネスロジック層は、ロジックが複雑になりがちなため、設計がうまくできずにメンテナンス性が悪くなりやすい。
3層アーキテクチャの問題点を緩和するため、レイヤードアーキテクチャを採用すると、下記のようなレイヤーになる。

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

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

  • UI層 = クライアントとの入出力をする層。Webフレームワークではコントローラに当たる部分。
  • Application層 = ユースケースの実現をする層。
  • Domain層 = ルールや制約などのドメイン知識の実現をする層。他の層にドメイン知識を流出しないようにする。
  • Infrastructure層 = データベースとの出力をする層。ドメインの永続化を行うモジュールなど。

★ポイント:依存性の方向を意識して、各レイヤーに責務を分離する。
これにより肥大化していたビジネスロジック層が分離し、各層のロジックの凝集度があがることで、メンテナンス性が向上する。

メリット

  • 影響箇所が明確。
    ある層を変更した場合、影響を受けるのはその上の層のみなので
    対応しなければならない箇所がわかりやすい。=>つまり、変化に強い。
  • ドメイン層だけを見れば、データの整合性ルールがわかる。

デメリット

  • チーム開発の場合は共通認識を作ることが大変。
  • 通常よりもコストをかけて仕組みを作るので(コード量なども多くなる)、変化が少ない(メリットがあまり得られない)場合には不向き。

おわりに

DDDは特定の技術に依存していないため自由にアーキテクチャを選択することが可能。
ドメイン駆動設計と同時に語られることが多いアーキテクチャとして、レイヤードアーキテクチャ、ヘキサゴナルアーキテクチャ、クリーンアーキテクチャなどがある。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1