4層レイヤー化アーキテクチャを調べた

更新: 2024/05/06, 作成: 2024/05/06

みなさんこんにちは、かじりです。4層レイヤー化アーキテクチャを調べました

このはてブ1のコメント2から見つけた。

神化しやすいUtilityを最初から置いてしまっていたりと、ToBeの図を見ても整理しづらそうな予感がする。まずは愚直に4層レイヤー化アーキテクチャ系(Ports&Adapters等)を実践するアプローチをお勧めしたい。

こう言われるとよくわからなかったが、どうやらプレゼンテーション、アプリケーション、ドメイン、インフラの4層に分けるやつだった。

層に分ける系はやってみたが、初期の時点ではやりすぎに感じる。時間経過で保守の段階で役に立ってくると思われた。いろんな層とやりとりしてると治しづらいからね。

GPT-4に聞いてみた1

4層レイヤー化アーキテクチャ系(Ports & Adapters等)は、システムを以下の4層に区分して設計する方法です。

  1. プレゼンテーション層 (UIやAPIなど、ユーザーインターフェース)
  2. アプリケーション層 (ユースケースやビジネスロジックの実装)
  3. ドメイン層 (ビジネスルールやエンティティの定義)
  4. インフラストラクチャ層 (データベースアクセスや外部APIの呼び出しなどの技術的詳細) この設計は、システムを疎結合に保ち、各層が独立しているため変更が容易になります。また、Ports & Adapters (ヘキサゴナルアーキテクチャ) は、アプリケーションのコアロジックをインフラストラクチャやユーザーインターフェースから分離し、ポートとアダプタを通じて通信するアーキテクチャスタイルです。これにより、アプリケーションの核心部分を外部要素から隔離し、テストやメンテナンスが容易になります。

GPT-4に聞いてみた2

Ports & Adapters (Hexagonal Architecture)は、アプリケーションのコアロジックを周辺の技術やインフラから独立させるアーキテクチャスタイル。内部(コアロジック)と外部(DB, UI, 他システム接続)の間にポートとアダプタを設け、外部の変更が内部に影響しないようにする。コアロジックが周辺技術に依存せず、テストや保守が容易になる。

GPT-4に聞いてみた3

はい、実際にDBフレームワークを頻繁に変更することは少ないです。しかし、Ports & Adaptersアーキテクチャの利点は、DBフレームワークの変更が容易であるだけでなく、アプリケーションのテスト容易性の向上、技術的負債の軽減、将来の技術変更への柔軟性確保にもあります。技術選定の自由度が高まり、長期的な保守性やスケーラビリティが向上します。

実際やってみると利点がイマイチだったよと言ったらテストの時にモックしやすいとかあるよね?と言われた。確かにその通りでした。まあでも、パッケージとかインストールしておいて、それをモックするから大体は問題ない。むしろ過剰なモックは偽陰性?本当なら失敗すべきところで成功したりするからよくないと思う。バランスを大事にしたい。

脚注

  1. https://speakerdeck.com/lycorptech_jp/yahoo-zhi-hui-dai-hurontoendoworiakitekutositeiruhua

  2. https://b.hatena.ne.jp/entry/4752336819104585984/comment/otherworld