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
DDDにどう立ち向かう?リファクタリングのあれこれ
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
natacon
September 30, 2022
Programming
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DDDにどう立ち向かう?リファクタリングのあれこれ
2022/9/29 3社合同DDD勉強会
natacon
September 30, 2022
More Decks by natacon
See All by natacon
"個"の集まりに"チームというフィクション"をデザインしてみた ― 認知とつながりが変わると、アウトカムの捉え方も変わる ―
natacon
0
130
Backend LT フェーズ変化、プロダクトの成長に伴う技術的変遷
natacon
0
190
課題解決ではなく、価値創造を求めるVoicyの開発チームの組織設計と立ち上げの勘所
natacon
5
1.8k
契約による設計の「契約」とは何を指しているか
natacon
0
730
DDD導入にどう立ち向かう? 開発現場への適用方法あれこれ②
natacon
1
540
DDD導入にどう立ち向かう? 開発現場への適用方法あれこれ①
natacon
1
440
Other Decks in Programming
See All in Programming
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
560
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
0
640
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
150
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
9
5.8k
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
160
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
150
Foundation Models frameworkで画像分析
ryodeveloper
1
170
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
160
数百円から始めるRuby電子工作
tarosay
0
120
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
190
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
190
Google Apps Script で Ruby を動かす
kawahara
0
120
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
How to make the Groovebox
asonas
2
2.3k
Design in an AI World
tapps
1
270
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
560
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
RailsConf 2023
tenderlove
30
1.5k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
We Are The Robots
honzajavorek
0
290
The Curious Case for Waylosing
cassininazir
1
440
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
Transcript
DDDにどう立ち向かう? リファクタリングのあれこれ 2022/09/29 株式会社Voicy 灘脇裕一 (@natacoon)
自己紹介 灘脇 裕一 Backend Engineer 機能開発チームリーダー スクラムマスター 2012.04 - HRTech
2020.07 - Voicy 本日はよろしくお願いします! @natacoon 好きなモノ: 服とねことスプラトゥーン 株式会社Voicy
本日のアジェンダ 影響範囲への意識を極力なくす 1 2 リファクタリングすべきはなにか
Voicy
Voicy 声で人の視界を広げ、ワクワクする社会へ。 たのしい声。せつない声。くやしい声。うれしい声。 ここに来れば、パーソナリティは本音を語ることができ、リス ナーは本音を聞くことができる。 そんな、声のプラットフォームを築くことで、人の視界は広が り、ワクワクする社会が生まれていく。2016年の創業以来、私 たちのこの想いは変わることはありません。
そのために、これからもVoicyは進化し続けます。
Voicy プロダクト
本日のアジェンダ 影響範囲への意識を極力なくす 1 2 リファクタリングすべきはなにか
前段 - もともとDDDは全くやっておらず、手続き的なコードが増えてきた - 以前はプロダクトに備えている機能はシンプルだったので、問題はなかった - が、徐々にプロダクト・開発組織も大きくなり始めたことにより、システムが実現しようと していることがコードから読み取りづらくなってきていた - 会社全体で概念レベルの理解がズレはじめていた
①のスライド ②のスライド
前段 今日の内容は Voicyで今後どうしていこうかを私が模索している 構想の途中経過を切り取って話してみる という回です
リファクタリングすべきはなにか
リファクタリングすべきはなにか ユーザーストーリーマッピング ユースケース ドメインモデル(概念レベル) モデリングはPdM、デザイナーとともにやってきている
リファクタリングすべきはなにか よーし、じゃあリファクタリングするぞ!
リファクタリングすべきはなにか どこから・・・?
リファクタリングすべきはなにか そもそもリファクタリングって? - マイクロリファクタリング - パターン指向リファクタリング - ドメインのリファクタリング(より深いモデルへのリファクタリング) エリック・エヴァンスのドメイン駆動設計 第3部
より深い洞察へ向かうリファクタリ ング より
リファクタリングすべきはなにか マイクロリファクタリング、パターン指向リファクタリングは技術的な観点から設計 の質を高める コードが何をしているかを理解しやすくする
リファクタリングすべきはなにか ドメインのリファクタリングは、ドメインに対する深い洞察をモデルに反映させる コードがなぜそれを行うのかをモデルに適用し、コードがなぜそうなっているのかを 明らかにする
リファクタリングすべきはなにか What → マイクロリファクタリング、パターン指向リファクタリング Why → ドメインのリファクタリング
リファクタリングすべきはなにか 事業としてプロダクトを成長させていくにあたって 本当に行いたいのはドメインのリファクタリング
リファクタリングすべきはなにか ドメインのリファクタリングにより モデルからさらなる洞察を行い、事業価値を高めるモデルを探求する活動を促進する これにより企業の活動を成長体質に変化させる
リファクタリングすべきはなにか とはいえ、ドメインのリファクタリングはたいていの場合において 一連のマイクロリファクタリングを伴う
リファクタリングすべきはなにか そのため、まずやるべきは マイクロリファクタリング、パターン指向リファクタリング
リファクタリングすべきはなにか どこから・・・?
リファクタリングすべきはなにか DDDを駆動している原則 - コアドメインに集中すること - ドメインの実装者とソフトウェアの実践者による創造的な共同作業を通じて、モ デルを探求すること - めいじてきな境界づけられたコンテキストの内部で、ユビキタス言語を語ること
リファクタリングすべきはなにか 極端にいえば、コアドメインさえモデルに準じた実装がされ、変更容易性を担保でき れば、事業価値を高める体質に変化させることはできる
リファクタリングすべきはなにか 書ききれなかったこと(ゴメンナサイ🙏) - コンテキストマップを作成してコアドメインを探す
影響範囲への意識を極力なくす
影響範囲への意識を極力なくす というか、まだそのモデルを適用できる状態ではないんだけど・・・
影響範囲への意識を極力なくす 大事な箇所だからこそ実装が込み入っていて手をつけるのが怖いし アーキテクチャにも課題があるんだけど・・・
影響範囲への意識を極力なくす 既存の実装を残しつつリファクタリングしてみない?
影響範囲への意識を極力なくす リファクタリングとは、コンピュータプログラミングにおいて、プログラムの外部か ら見た動作を変えずにソースコードの内部構造を整理することである。 Wikipedia より
影響範囲への意識を極力なくす つまり、既存コードすべてに手を加える必要はなく、既存を捨てつつ置き換えること もある(当たり前だけども) =捨て去るのはメソッド、クラス、はたまたユースケース実装ごとなど、置き換える 単位は様々 (マイクロサービスへの移行なども、大きな見方をすればリファクタリングの一部と 考えられる)
影響範囲への意識を極力なくす 例えば・・・ APIインターフェースを変えないけど、内部のアーキテクチャから見直したい
影響範囲への意識を極力なくす アプリケーションレイヤ以降を置き換えてみる
影響範囲への意識を極力なくす アプリケーション層のユースケース(サービス)ごと新規に実装し、プレゼンテー ション層からの呼び出しを切り替える (=既存コードを残したままにする)
影響範囲への意識を極力なくす いろんな粒度でのストラングラー(アプリケーション)を作っていく ビッグバンリライトを避けてリスクを軽減する マイクロサービスパターン Chapter13 1.2 モノリスを絞め殺す より
影響範囲への意識を極力なくす 「ビッグバンリライトが生み出すのはビッグバンだけ」 マーチン・ファウラー
影響範囲への意識を極力なくす デメリット - 捨てる予定のコードに新規機能が実装されてしまうとそのまま負債になる - いずれ再実装することになるので、開発にかける時間ももったいない
影響範囲への意識を極力なくす Kubernetes上に各種サービスが稼働してる おまけ: デプロイのはなし
影響範囲への意識を極力なくす カナリアリリースとして、1Podだけ既存のnamespaceのdeployment管理下にリファクタリング 後の呼び出しに変更した実装を適用したPodを配置する おまけ: デプロイのはなし リファクタ版
影響範囲への意識を極力なくす エラーが一定以上起こるようであればPodを取り除く おまけ: デプロイのはなし リファクタ版
まとめ - コアドメインを見つけて(定義して)集中しよう! - 一定以上大きいリファクタリングはストラングラーパターンを使って、既存 コードへの大きい変更を避けてみよう!
参考
お知らせ Meetyでカジュアル面談をやってます! 転職関係ない話もウェルカムなのでお話しましょう URL: https://meety.net/matches/KjRwJrKGDbKO Voicy ダウンロードリンク