はじめに
ADRというソフトウェアアーキテクチャパターンがMVCよりも修正がしやすくて再利用性が高いということで調べてみたら結構良さそうだったからどんなものか忘れないために備忘録として記載する。
ADRとは
Paul M. Jonesさんという方が提案したソフトウェアアーキテクチャパターンの一つです。
MVCと違って1クラス1アクションクラス
なのでクラスが持つ責務がはっきりしているため、再利用性が高くて保守もしやすい
です。
簡単な流れ
HTTPリクエストから入力を収集(Action)
↓
ドメインを呼び出して入力情報を渡す(Action)
↓
結果を処理する(Domain)
↓
HTTP応答を作成(Responder)
↓
レスポンスを返す(Controller)
Action
HTTPリクエストを受け取り、Domainからの処理結果をResponderに返す役割を果たします。
この中では特に処理を行わずにDomainやResoponderに値を渡したりする役割です。
みんなの橋渡し的な存在ですかね。
Domain層で例外があったとしてもActionでは処理をしない
です。
Domainで独自の例外処理を行なって結果をActionに返すイメージです。
Domain
渡されたHTTPリクエストに対して必要な処理を行い、結果を返します。
ビジネスロジックはこちらに書きます。
「この処理はDomainか?」と悩んでしまう場合があるかもですが、
ストレージに触れるものはDomainに書け
とだけでも覚えておきましょう!
Responder
Domainの処理結果を受け取り、必要な準備を行ってHTTP応答を構築するレスポンスを返します。
参考
ADRという考えを取り入れてみて
Action–domain–responder
LaravelでのADR(Action-domain-responder)実装