Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ADRという考えを取り入れてみて

 ADRという考えを取り入れてみて

【タガヤス その13】ILの日常業務から 発表資料

https://tagayas.connpass.com/event/145290/

Infiniteloop

October 18, 2023
Tweet

More Decks by Infiniteloop

Other Decks in Programming

Transcript

  1. <date/time> <footer> 4 目次 • 話したいこと
 • なぜこの話を
 • ADRパターンとは

    • MVCとの比較 • どんな成果につながったか • 纏め
  2. <date/time> <footer> 22 Client
 Server
 HTTPリクエスト
 Actionが入力を収集
 ・ドメインを呼び出し
 ・結果を保持
 ・HTTP応答を作成


    ActionがHTTP応答
 受信
 1.HTTPリクエストから入力を収集(Action)
 2.これらの入力でドメインを呼び出し(Action)
 3.結果を保持(Domain)
 4.HTTP応答を作成(Responder)
 5.HTTP応答(Controller)
 処理の流れ
  3. <date/time> <footer> 41 class ItemController 
 {
 public function getItem(int

    $item_id, ItemService $service): JsonResponse 
 {
 $user = Auth::user; 
 // ユーザーIDとアイテムIDから該当のアイテムを取得 
 $item = $service->getItem($user->id, $item_id); 
 // アイテムが存在しなかった場合404を返す 
 if (is_null($item)) { 
 response()->json([ 
 'status' => 404, 
 'errors' => $this->getMessage(アイテムが存在しない) 
 ], 404); 
 }
 // HTTPレスポンス構築 
 return response()->json($item, 200); 
 }
 }

  4. <date/time> <footer> 42 class ItemController 
 {
 public function getItem(int

    $item_id, ItemService $service): JsonResponse 
 {
 $user = Auth::user; 
 // ユーザーIDとアイテムIDから該当のアイテムを取得 
 // レスポンスも構築 
 $response = $service->getItem($user->id, $item_id); 
 return $response; 
 }
 }

  5. <date/time> <footer> 43 class ItemService 
 {
 public function getItem(int

    $item_id): JsonResponse 
 {
 // ユーザーIDとアイテムIDから該当のアイテムを取得 
 $item = $service->getItem($user->id, $item_id); 
 // アイテムが存在しなかった場合404を返す 
 if (is_null($item)) { 
 response()->json([ 
 'status' => 404, 
 'errors' => $this->getMessage(アイテムが存在しない) 
 ], 404); 
 }
 // HTTPレスポンス構築 
 return response()->json($item, 200); 
 }
 }

  6. <date/time> <footer> 45 class ItemAcquisitionAction
 {
 private $service;
 private $responder;


    
 public function __construct(ItemService $service, ItemResponder $item_responder)
 {
 $this->service = $service;
 $this->responder = $item_responder;
 }
 
 public function __invoke(int $item_id): JsonResponse
 {
 $user = Auth::user;
 // ユーザーIDとアイテムIDから該当のアイテムを取得
 $item = $service->getItem($user->id, $item_id);
 // HTTPレスポンス構築
 return $this->responder->execute($item);
 }
 }
 

  7. <date/time> <footer> 46 class ItemResponder
 {
 public function execute(?Item item):

    JsonResponse
 {
 // アイテムが存在しなかった場合404を返す 
 if (is_null($item)) { 
 response()->json([ 
 'status' => 404, 
 'errors' => $this->getMessage(アイテムが存在しない) 
 ], 404); 
 }
 // HTTPレスポンス構築 
 return response()->json($item, 200); 
 }
 }