3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ADRパターン

Last updated at Posted at 2022-03-09

ADRの概要

  • Action-Domain-Responder
  • ソフトウェアアーキテクチャパターンの1つ
  • MVCの改良版

MVCと違うところ

1つのアクションに対して、そのリクエストからレスポンスを定義する。

MVCの場合

例えばMVC実装だと、1つのコントローラーに

  • index
  • insert
  • update
  • delete

などアクションを複数定義する。

ADRの場合

1クラス1アクションにより

  • シンプルなリクエスト→レスポンスの流れ
  • 1クラスの責務が明確

構成

Action

リクエストを受け取り、ドメインの処理結果をレスポンダに渡す

Domain

必要な処理を行い結果を返す
ビジネスロジックはここに含まれる

Responder

ドメインの処理結果を受け取り、必要な準備を行いレスポンスを返す

実装例

PHP/Laravel

Actionクラス

  • Controllerクラスを継承
  • コンストラクタでドメインオブジェクトとレスポンダオブジェクトを注入
  • レスポンダに渡す処理をinvoke(マジックメソッド)で定義
class HogeIndexAction extends Controller
{
  protected $domain;
  protected $responder;

  public fucntion __construct(
    Domain $domain,
    Responder $responder
  ) {
    $this->domain = $domain;
    $this->responder = $responder;
  }

  public function __invoke(Request $request): Response
  {
    return $this->responder->response(
      $this->domain->get()
    );
  }
}

Domainクラス

class HogeIndexDomain
{
  public function get()
  {
    /*
     * ビジネスロジック等
     *
     */

    // 処理したデータを返す
    return ['hoge' => 'fuga'];
  }
}

Responderクラス

class HogeIndexResponder
{
  protected $response;
  protected $view;

  public function __construct(Response $response, ViewFactory $view)
  {
    $this->response = $response;
    $this->view = $view;
  }

  public function response($data): Response
  {
    if (empty($data)) {
      // 404ステータスコードと共にエラー表示
    }

    // 取得したデータをセットしたviewを返す
    $this->response->setContent(
      $this->view->make('hoge.index', ['hoge' => $data])
    );
    return $this->response;
  }
}

参考

LaravelでのADR(Action-domain-responder)実装

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?