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
natacon
September 30, 2022
Programming
1
1k
DDDにどう立ち向かう?リファクタリングのあれこれ
2022/9/29 3社合同DDD勉強会
natacon
September 30, 2022
Tweet
Share
More Decks by natacon
See All by natacon
Backend LT フェーズ変化、プロダクトの成長に伴う技術的変遷
natacon
0
110
課題解決ではなく、価値創造を求めるVoicyの開発チームの組織設計と立ち上げの勘所
natacon
5
1.4k
契約による設計の「契約」とは何を指しているか
natacon
0
280
DDD導入にどう立ち向かう? 開発現場への適用方法あれこれ②
natacon
1
410
DDD導入にどう立ち向かう? 開発現場への適用方法あれこれ①
natacon
1
300
Other Decks in Programming
See All in Programming
Immutable ActiveRecord
megane42
0
140
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
160
社内フレームワークとその依存性解決 / in-house framework and its dependency management
vvakame
1
560
Honoとフロントエンドの 型安全性について
yodaka
7
1.2k
Grafana Cloudとソラカメ
devoc
0
170
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
270
Formの複雑さに立ち向かう
bmthd
1
850
Writing documentation can be fun with plugin system
okuramasafumi
0
120
『品質』という言葉が嫌いな理由
korimu
0
160
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
110
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta27
0
120
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
150
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
The Cult of Friendly URLs
andyhume
78
6.2k
Navigating Team Friction
lara
183
15k
Docker and Python
trallard
44
3.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Unsuck your backbone
ammeep
669
57k
A Tale of Four Properties
chriscoyier
158
23k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Practical Orchestrator
shlominoach
186
10k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
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 ダウンロードリンク