Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RDRA, ICONIX, DDDの実践から得た学び
Search
hsawaji
September 15, 2023
Programming
5
2.5k
RDRA, ICONIX, DDDの実践から得た学び
2023.09.14
asken withミライトデザインのDDDのはじめ方 DDD x RDRA x ICONIX
https://asken.connpass.com/event/293085/
hsawaji
September 15, 2023
Tweet
Share
More Decks by hsawaji
See All by hsawaji
リアーキテクチャxDDD 1年間の取り組みと進化
hsawaji
1
290
Other Decks in Programming
See All in Programming
ChatGPT とつくる PHP で OS 実装
memory1994
PRO
2
130
17年周年のWebアプリケーションにTanStack Queryを導入する / Implementing TanStack Query in a 17th Anniversary Web Application
saitolume
0
250
GitHubで育つ コラボレーション文化 : ニフティでのインナーソース挑戦事例 - 2024-12-16 GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
120
Go の GC の不得意な部分を克服したい
taiyow
3
840
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
190
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
970
Spatial Rendering for Apple Vision Pro
warrenm
0
150
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
410
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
230
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
130
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
8
1.9k
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
5
950
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Visualization
eitanlees
146
15k
Music & Morning Musume
bryan
46
6.2k
A better future with KSS
kneath
238
17k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
The Invisible Side of Design
smashingmag
298
50k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Site-Speed That Sticks
csswizardry
2
190
Transcript
© asken.inc RDRA, ICONIX, DDDの実践から得た学び 23/09/14 asken hsawaji
© asken.inc 2 背景 「あすけん」のサービスをリアーキテクチャするために、約5ヶ月間、技術検証を行って きました。 この検証では、既存システムを対象に分析から実装まで一通り行いました。その際、 RDRA, ICONIX, DDDなどの手法を活用して進めてきました。
今回は、各手法をどの用に使ったのか、どのような学びが合ったのかを紹介したいと 思います。
© asken.inc 3 自己紹介 askenでバックエンドエンジニアをやっています。 海外事業部にいたり、医療事業部にいたりして、 今は国内事業部でシステムのリアーキテクチャを推進しています。 askenではずっとPHPを触っていましたが今回のリアーキテクチャからKotlinを触るよ うになりました。 設計とアーキテクチャの勉強中です。
© asken.inc 4 テックブログも書いています PHPからKotlinへ、ドメイン駆動設計を用いたリアーキテクチャへの挑戦 https://tech.asken.inc/entry/2023/08/10/170000 より良い設計にするための勉強会を行いました https://tech.asken.inc/entry/2022/03/30/180000 Slackで「マルチチャンネルゲスト」のGithub通知を改善しました https://tech.asken.inc/entry/2022/10/07/170000
© asken.inc 5 スタート時点の私 RDRA - 「RDRAハンドブック2.0」は読んだ - 用語はざっくりと理解している -
実践した経験はない ICONIX - 「ユースケース駆動開発実践ガイド」は未読 - 用語はいくつか聞いたことがある - 実践した経験はない DDD - 「エヴァンス本」は読んだ - 社内の勉強会で学んだ - 用語と概要くらいはわかる - 実践した経験はない
© asken.inc 6 RDRA
© asken.inc 7 スプレッドシート版のRDRAを使用しました。 このスプレッドシートは、左のシートから順番に埋めていくことで、RDRAの 工程を進めてられるような構成になっています。 スプレッドシート版のRDRA: http://vsa.co.jp/rdratool/rdragraph0.7/RDRAToolDoc.pdf
© asken.inc 8 スプレッドシート版RDRAは下記のようなような流れで使い方を覚えました - ミライトデザインさんのRDRAワークショップの勉強会動画を見る - 参考: 【RDRA ×
AI】AI時代の要件定義ワークショップ【ペチオブ】 - https://www.youtube.com/watch?v=IfEu2KE7_5U - RDRAハンドブック2.0を見直しながらスプレッドシートと対応させていく
© asken.inc 9 食事記録 - ビジネスユースケース(BUC) - アクティビティ - ユースケース(UC)
- 情報 - アクター
© asken.inc 10 食事記録 目的達成までの ユーザの動き システムの動作 ユーザの目的 「情報」はエンティティ 対象ユーザ
左から記載していく
© asken.inc 11 あすけん会員 (アクティビティ) システム (UC) 食品検索 食事記録 分量変更
キーワード 検索を行う 食事記録を 保存する 食事記録の分量を 更新する 食品選択 食事を記録しよう (BUC) データ (情報) 食品マスタ 食事記録 あすけん会員 (アクター)
© asken.inc 12 効果 RDRAではユースケースをアクティビティから分析するので、既存のシステム に影響されることなくユースケースを洗い出すことができた 複数のユースケースが含まれていたControllerも ユースケース毎にクラスが切り出され処理がわかりやすくなった
© asken.inc Controller 13 Controller UseCase1 クラス UseCase2 クラス UseCase1.処理()
UseCase2.処理() UseCase1の処理 UseCase2の処理 UseCase1’の処理 UseCase3の処理 UseCase2’の処理 UseCase3.処理() UseCase3 クラス
© asken.inc 14 概念モデル
© asken.inc 15 設計に入る前に、既存システムの構成要素と各要素の関係を整理するために 「概念モデル」を作ることにしました 合計10時間ほど時間をかけて、全員でワークショップを行なった
© asken.inc 16 ワークショップはMiroを使って下記のような流れで行なった 1. 要素を付箋を書きながら周辺の業務知識を説明していく 2. 疑問点は都度質問を受けて付箋を使って説明をしていく 3. モデリングの観点で議論しながら付箋を修正していく
© asken.inc 17
© asken.inc 18 効果 - システムが「どうあるべきか」の共通認識が持てた - 既存システムがどうなっているかではなく「どうあるべきか」話すことができた - ドメイン知識の伝達ができた
- 概念に関連する知識を網羅的に説明できた - 質問を受けることで「暗黙的な知識」も説明できた - システムの複雑な箇所が可視化された - システムの複雑な所に対して検証を行うことができた - 概念と説明を同じ資料にまとめたので後で参照しやすくなった - 質問などで前提を説明する必要がなくなった - ドメインエキスパートとも同じ資料で会話ができた - 用語と関連性の情報なのでエンジニア以外も理解がしやすい
© asken.inc 19 チームで「概念モデル」を一緒に作ることにより素早く共通認識を作る事がで きた、出来上がったもと同じくらい過程も大切だと感じた このワークショップは、その後の開発をスムーズに行うために効果的だった
© asken.inc 20 ICONIX / ユースケース記述
© asken.inc 21 RDRAで洗い出したユースケースに対して、ユースケース記述をつくる ユースケース記述は、ユーザの操作とシステムの処理を数行で記載する
© asken.inc 22 ユーザの動作と システムの処理 代替コースは途中で 処理が終了するもの
© asken.inc 23 振る舞い モデルに必要な用語 ドメインモデルに反映 ドメインモデルに反映
© asken.inc 24 ユースケースを具体的に記述することで、見えていなかった概念が見えてくる それをドメインモデルに反映することで良いモデルにアップデートできる 必要な振る舞いがわかることで、クラス設計の足がかりになる 効果
© asken.inc 25 DDD (クラス設計 ~ 実装)
© asken.inc 26 分析を元に設計する 概念モデル ドメイン モデル ユースケース 記述 クラスの
分け方 クラスの 振る舞い
© asken.inc 27 設計を元に実装する 概念モデル ドメイン モデル ユースケース 記述 クラスの
分け方 クラスの 振る舞い ソースコード 実装
© asken.inc 28 実装の結果でモデルを更新する 概念モデル ドメイン モデル ユースケース 記述 クラスの
分け方 クラスの 振る舞い ソースコード 実装 フィードバック
© asken.inc 29 実装中に得られる情報 - 実装することで得られた知識 - 新しく思いついたアイデア - モデルの欠陥
(実装できない・情報が取れない) 実装を進めていくと、ドメインモデルがどんどん変わっていく 実装しながらドメインモデルも洗練していく アイデアを素早く確認するためにドメインモデルを使用する
© asken.inc 30 DDDを使うメリット - 実装からドメインモデルにフィードバックをするメリット - ドメインモデルの検証を実装で行なう - 実装することで、ドメインモデルの矛盾点や欠陥が明らかになる
- ドメインモデルを使うメリット - 設計の良し悪しはドメインモデルで全体を見たほうが分かりやすい - 視覚的に分かりやすいので、設計の議論をする際に共通認識を取りやすい - 簡単に変更できるので、レビューと修正がしやすい
© asken.inc 31 まとめ 今回の技術検証では RDRA、ICONIX、DDDを1つ1つ丁寧に行うことで、それぞ れの成果物が実装に繋がっている感覚を得ることができた 概念モデルは、素早く共通認識を作ることができ、非常に有効なものであった その概念モデルからドメインモデルを作るので、認識のズレが少なく設計の議 論ができたと感じている
© asken.inc 32 成果物のつながりのモデル
© asken.inc 33 スタート時点の私 RDRA - 「RDRAハンドブック2.0」は読んだ - 用語はざっくりと理解している -
実践した経験はない ICONIX - 「ユースケース駆動開発実践ガイド」は読んでいない - 用語はいくつか聞いたことがある - 実践した経験はない DDD - 「エヴァンス本」は読んだ - 社内の勉強会で学んだ - 用語と概要くらいはわかる - 実践した経験はない
© asken.inc 34 今の私 RDRA - RDRAの各要素の意味を理解した - 業務フローを意識して RDRAで分析できるようになった
- 既存システムに影響されないユースケースの分析ができるようになった ICONIX - ユースケース記述とモデルの関係性を理解した - ユースケース記述を設計に繋げられるようになった DDD - モデルと実装のフィードバックループの利点を理解した - ドメインモデルを中心とした開発を実践できるようになった
© asken.inc 35 この5ヶ月間で業務をモデル化してソースコードで検証する方法を学ぶことが出 来ました。 これらの方法を使って、リアーキテクチャを確実に前に進められるようになっ たと思います。 まだまだ勉強中ですが、頑張っていきます。
© asken.inc 36 ご清聴ありがとうございました