Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
infinite_loop
PDF, PPTX
3,058 views
ADRという考えを取り入れてみて
【タガヤス その13】ILの日常業務から 発表資料 https://tagayas.connpass.com/event/145290/
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 49
2
/ 49
3
/ 49
4
/ 49
5
/ 49
6
/ 49
7
/ 49
8
/ 49
9
/ 49
10
/ 49
11
/ 49
12
/ 49
13
/ 49
14
/ 49
15
/ 49
16
/ 49
17
/ 49
18
/ 49
19
/ 49
20
/ 49
21
/ 49
22
/ 49
23
/ 49
24
/ 49
25
/ 49
26
/ 49
27
/ 49
28
/ 49
29
/ 49
30
/ 49
31
/ 49
32
/ 49
33
/ 49
34
/ 49
35
/ 49
36
/ 49
37
/ 49
38
/ 49
39
/ 49
40
/ 49
41
/ 49
42
/ 49
43
/ 49
44
/ 49
45
/ 49
46
/ 49
47
/ 49
48
/ 49
49
/ 49
More Related Content
PDF
オブジェクト指向エクササイズのススメ
by
Yoji Kanno
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
PPTX
やってはいけない空振りDelete
by
Yu Yamada
PDF
ドメイン駆動設計 の 実践 Part3 DDD
by
増田 亨
PDF
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
by
Satoshi Takami
PDF
リッチなドメインモデル 名前探し
by
増田 亨
PDF
Where狙いのキー、order by狙いのキー
by
yoku0825
PDF
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
オブジェクト指向エクササイズのススメ
by
Yoji Kanno
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
やってはいけない空振りDelete
by
Yu Yamada
ドメイン駆動設計 の 実践 Part3 DDD
by
増田 亨
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
by
Satoshi Takami
リッチなドメインモデル 名前探し
by
増田 亨
Where狙いのキー、order by狙いのキー
by
yoku0825
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
What's hot
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
PPTX
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
PDF
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
by
A AOKI
PPTX
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
by
Shinji Takao
PDF
Unified JVM Logging
by
Yuji Kubota
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
by
Yoshitaka Kawashima
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
by
NTT DATA Technology & Innovation
PDF
Swaggerでのapi開発よもやま話
by
KEISUKE KONISHI
PDF
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
KEY
やはりお前らのMVCは間違っている
by
Koichi Tanaka
PPTX
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
PDF
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
by
Koichiro Matsuoka
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
by
sairoutine
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
PPTX
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
by
NTT DATA Technology & Innovation
PDF
例外設計における大罪
by
Takuto Wada
PDF
今日からできる!簡単 .NET 高速化 Tips
by
Takaaki Suzuki
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
by
A AOKI
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
by
Shinji Takao
Unified JVM Logging
by
Yuji Kubota
強いて言えば「集約どう実装するのかな、を考える」な話
by
Yoshitaka Kawashima
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
by
NTT DATA Technology & Innovation
Swaggerでのapi開発よもやま話
by
KEISUKE KONISHI
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
やはりお前らのMVCは間違っている
by
Koichi Tanaka
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
by
Koichiro Matsuoka
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
by
sairoutine
マイクロサービス 4つの分割アプローチ
by
増田 亨
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
by
NTT DATA Technology & Innovation
例外設計における大罪
by
Takuto Wada
今日からできる!簡単 .NET 高速化 Tips
by
Takaaki Suzuki
Similar to ADRという考えを取り入れてみて
PDF
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
by
miso- soup3
PDF
PHP 2大 web フレームワークの徹底比較!
by
Shohei Okada
ODP
デザインパターン(初歩的な7パターン)
by
和明 斎藤
PDF
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
by
Akira Inoue
PDF
Hyper → Highspeed → Development
by
aktsk
PDF
Weeklycms20120218
by
Yoshi Sakai
PDF
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
by
codeal
PDF
DDD 20121106 SEA Forum November
by
増田 亨
PDF
Nds#24 単体テスト
by
Kazumune Katagiri
PDF
Phpではじめるオブジェクト指向(公開用)
by
VOYAGE GROUP
PDF
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
by
Hiroyuki Ohnaka
PDF
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
by
Toru Kawamura
PDF
BPStudy20121221
by
Shinichiro Takezaki
PDF
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
by
ericsagnes
PPTX
20120128
by
小野 修司
PDF
Ymbal expart.php.2ndtermstudent.finalpresentation
by
yoshitaro yoyo
PDF
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
by
Shohei Okada
PDF
EC-CUBEユーザカンファレンス2016
by
Chihiro Adachi
PDF
Mvc conf session_1_osada
by
Hiroshi Okunushi
PPT
Spring mvc
by
Ryo Asai
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
by
miso- soup3
PHP 2大 web フレームワークの徹底比較!
by
Shohei Okada
デザインパターン(初歩的な7パターン)
by
和明 斎藤
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
by
Akira Inoue
Hyper → Highspeed → Development
by
aktsk
Weeklycms20120218
by
Yoshi Sakai
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
by
codeal
DDD 20121106 SEA Forum November
by
増田 亨
Nds#24 単体テスト
by
Kazumune Katagiri
Phpではじめるオブジェクト指向(公開用)
by
VOYAGE GROUP
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
by
Hiroyuki Ohnaka
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
by
Toru Kawamura
BPStudy20121221
by
Shinichiro Takezaki
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
by
ericsagnes
20120128
by
小野 修司
Ymbal expart.php.2ndtermstudent.finalpresentation
by
yoshitaro yoyo
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
by
Shohei Okada
EC-CUBEユーザカンファレンス2016
by
Chihiro Adachi
Mvc conf session_1_osada
by
Hiroshi Okunushi
Spring mvc
by
Ryo Asai
More from infinite_loop
PDF
ChatGPT触ってみた
by
infinite_loop
PDF
社内ソフトスキルを考える
by
infinite_loop
PDF
3Dプリンタって いいね
by
infinite_loop
PDF
VRChatでお酒が注げる飲み物アセットの紹介
by
infinite_loop
PDF
アニメーションとスキニングをBurstで独自実装する.pdf
by
infinite_loop
PDF
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
by
infinite_loop
PDF
500万行のPHPプロジェクトにおけるログ出力の歩み
by
infinite_loop
PDF
リファクタリングで実装が○○分短縮した話
by
infinite_loop
PDF
ゲームのインフラをAwsで実戦tips全て見せます
by
infinite_loop
PDF
楽しいVR空間を作る技術と支える技術 #osc19do
by
infinite_loop
PDF
Start rl with_unity_machine_learning_agents
by
infinite_loop
PDF
UniRx の1歩目
by
infinite_loop
PDF
がんばれ PHP Fiber
by
infinite_loop
PDF
心に残った名前ランキング
by
infinite_loop
PDF
プログラムと名前にまつわる座談会
by
infinite_loop
PDF
名は体を表していますか
by
infinite_loop
PDF
名前の力
by
infinite_loop
PDF
大切な名前[Intro]公開版
by
infinite_loop
PDF
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
by
infinite_loop
PDF
複数拠点における開発効率の維持・向上
by
infinite_loop
ChatGPT触ってみた
by
infinite_loop
社内ソフトスキルを考える
by
infinite_loop
3Dプリンタって いいね
by
infinite_loop
VRChatでお酒が注げる飲み物アセットの紹介
by
infinite_loop
アニメーションとスキニングをBurstで独自実装する.pdf
by
infinite_loop
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
by
infinite_loop
500万行のPHPプロジェクトにおけるログ出力の歩み
by
infinite_loop
リファクタリングで実装が○○分短縮した話
by
infinite_loop
ゲームのインフラをAwsで実戦tips全て見せます
by
infinite_loop
楽しいVR空間を作る技術と支える技術 #osc19do
by
infinite_loop
Start rl with_unity_machine_learning_agents
by
infinite_loop
UniRx の1歩目
by
infinite_loop
がんばれ PHP Fiber
by
infinite_loop
心に残った名前ランキング
by
infinite_loop
プログラムと名前にまつわる座談会
by
infinite_loop
名は体を表していますか
by
infinite_loop
名前の力
by
infinite_loop
大切な名前[Intro]公開版
by
infinite_loop
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
by
infinite_loop
複数拠点における開発効率の維持・向上
by
infinite_loop
ADRという考えを取り入れてみて
2.
<date/time> <footer> 2 自己紹介
3.
<date/time> <footer> 4 目次 ●
話したいこと ● なぜこの話を ● ADRパターンとは ● MVCとの比較 ● どんな成果につながったか ● 纏め
4.
<date/time> <footer> 5 話したいこと
5.
<date/time> <footer> 6 ADRを意識して実装したことによってMとV の切り離しが上手くいき、修正がしやすく、 再利用性もあがった為開発効率が上がっ た
6.
<date/time> <footer> 7 なぜこの話を
7.
<date/time> <footer> 8 大きめの機能実装を担当した
8.
<date/time> <footer> 9 MVCに綺麗に三分割されていない Controllerとテンプレートははっきり分かれている がそれ以外はModelのような構成
9.
<date/time> <footer> 10 既存コードを丸々参考にすると部品分け は上手くいかなそう
10.
<date/time> <footer> 11 しっかり機能分けしないと負の 遺産コードになってしまう
11.
<date/time> <footer> 12 ソーシャルゲームの開発なので基本jsonを返す クライアント側とサーバーでこう来たらこう返すを定 義し その定義に沿ってレスポンスを構築する ↑これはMVCのVの役目
12.
<date/time> <footer> 13 Client
Server HTTPリクエスト HTTPレスポンス (type:json) 構築を行うのがViewの役目
13.
<date/time> <footer> 14 参考にしようとしたコードはこれがMに含まれていた
14.
<date/time> <footer> 15 ふむり、、どうしようか 浅ーい経験と知識の中に一つの光が そういえばADRパターンというのがあったな
15.
<date/time> <footer> 16 ADRパターンとは
16.
<date/time> <footer> 17 Paul
M.Jonesさんが考案した MVC Refinementとして提唱されている、MVCの派 生のパターン
17.
<date/time> <footer> 18 ADR ●
A=Action ● D=Domain ● R=Responder Action Domain Responder
18.
<date/time> <footer> 19 ADRのD(Domain) Dはビジネスロジック!!
19.
<date/time> <footer> 20 ADRのR(Responder) Actionから受信したデータからHTTP応答を構築す るためのプレゼンテーションロジック
20.
<date/time> <footer> 21 ADRのA(Action) 入力(リクエスト)に基づき DomainとResponderを制御する
21.
<date/time> <footer> 22 Client
Server HTTPリクエスト Actionが入力を収集 ・ドメインを呼び出し ・結果を保持 ・HTTP応答を作成 ActionがHTTP応答 受信 1.HTTPリクエストから入力を収集(Action) 2.これらの入力でドメインを呼び出し(Action) 3.結果を保持(Domain) 4.HTTP応答を作成(Responder) 5.HTTP応答(Controller) 処理の流れ
22.
<date/time> <footer> 23 MVCに似たアーキテクチャで 分かりやすい
23.
<date/time> <footer> 24 MVCパターンとの比較
24.
<date/time> <footer> 25 そもそもとしてなのですが、新卒でこの会社に入っ てからずっと今のプロジェクトなので、MVCでPHP のフレームワーク使って書く例はそんなには知らな い!!
25.
<date/time> <footer> 26 そもそもADRはMVCの派生パターン Action
= Controller Domain = Model Responder = View
26.
<date/time> <footer> 27 差ほど違いがないので省略 ActionとController
DomainとView
27.
<date/time> <footer> 28 違いはResponderとViewにあ る
28.
<date/time> <footer> 29 そもそもViewの役割って?
29.
<date/time> <footer> 30 処理結果をユーザーにどの形 で見せるかを決める
30.
<date/time> <footer> 31 Viewは ControllerでHTTPレスポンスのbodyを生成し、 HTTPヘッダの値もControllerの中で設定されま す。Viewと聞くと、ああテンプレートのことね、とい う人も多いでしょう。
31.
<date/time> <footer> 32 それに対してResponder
32.
<date/time> <footer> 33 Domainが出力したデータを HTTPの表現に変換する
33.
<date/time> <footer> 34 結局の所MVCとADRって差ほ ど変わらないのでは?
34.
<date/time> <footer> 35 大きな違いは無いがADRは MVCの上位互換
35.
<date/time> <footer> 36 一般的に使われているMVCを 基本使うで良いがADRの考え 方を少し取り入れるだけでも 良いと思う
36.
<date/time> <footer> 37 どんな成果に繋がったか
37.
<date/time> <footer> 38 責務の切り分けが上手くできて分かりや すく機能の使いまわしがしやすいコード になった
38.
<date/time> <footer> 39 コード比較
39.
<date/time> <footer> 40 Before
40.
<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); } }
41.
<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; } }
42.
<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); } }
43.
<date/time> <footer> 44 After
44.
<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); } }
45.
<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); } }
46.
<date/time> <footer> 47 纏め
47.
<date/time> <footer> 48 今携わっているプロジェクトは規模が大 きくADRをそのまま取り入れるのは無理 でしたが、考え方を取り入れたことによっ て取り入れる前よりも良いコードが書け たのではないかと思います
48.
<date/time> <footer> 49 参考URL ・Paul
M.Jones https://github.com/pmjones/adr ・ADRパターン実践時のトレードオフとの向き合い方 https://nextat.co.jp/staff/archives/174 ・[RadarPHP]Action-Domain-Responder(ADR)パターンとRadarの紹介 https://nextat.co.jp/staff/archives/149
49.
<date/time> <footer> 50 終わり
Download