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
増田 亨
PDF, PPTX
3,809 views
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
ドメイン駆動設計でなぜ作るのか? ドメイン駆動設計の考え方の核心 レガシーコードの改善にドメイン駆動設計が役に立つのか? ドメイン駆動設計でレガシーコードに立ち向かった8つのステップ 振り返りと展望
Software
◦
Read more
7
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 38
2
/ 38
3
/ 38
4
/ 38
5
/ 38
6
/ 38
7
/ 38
8
/ 38
9
/ 38
10
/ 38
11
/ 38
12
/ 38
13
/ 38
14
/ 38
15
/ 38
16
/ 38
17
/ 38
18
/ 38
19
/ 38
20
/ 38
Most read
21
/ 38
22
/ 38
Most read
23
/ 38
24
/ 38
25
/ 38
26
/ 38
Most read
27
/ 38
28
/ 38
29
/ 38
30
/ 38
31
/ 38
32
/ 38
33
/ 38
34
/ 38
35
/ 38
36
/ 38
37
/ 38
38
/ 38
More Related Content
PDF
ドメイン駆動設計の正しい歩き方
by
増田 亨
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
PDF
なぜ「マイクロサービス“化”」が必要なのか
by
Yusuke Suzuki
PDF
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
PDF
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
PDF
ドメイン駆動設計 基本を理解する
by
増田 亨
PDF
正しいものを正しく作る塾-設計コース
by
増田 亨
ドメイン駆動設計の正しい歩き方
by
増田 亨
マイクロサービス 4つの分割アプローチ
by
増田 亨
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
なぜ「マイクロサービス“化”」が必要なのか
by
Yusuke Suzuki
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
ドメイン駆動設計 基本を理解する
by
増田 亨
正しいものを正しく作る塾-設計コース
by
増田 亨
What's hot
PDF
マルチテナント化で知っておきたいデータベースのこと
by
Amazon Web Services Japan
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
PDF
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
PDF
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
PDF
例外設計における大罪
by
Takuto Wada
PDF
シリコンバレーの「何が」凄いのか
by
Atsushi Nakada
PPTX
AWSで作る分析基盤
by
Yu Otsubo
PDF
ユーザーストーリー駆動開発で行こう。
by
toshihiro ichitani
PPTX
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
PDF
Dockerからcontainerdへの移行
by
Kohei Tokunaga
PPTX
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
PDF
IT系エンジニアのためのプレゼンテーション入門
by
Masahito Zembutsu
PDF
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
by
Jun-ichi Sakamoto
PDF
DockerとPodmanの比較
by
Akihiro Suda
PDF
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
PDF
ドメイン駆動設計という設計スタイル
by
増田 亨
PDF
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
PDF
Lean coffee
by
Takeshi Arai
PDF
オブジェクト指向プログラミングの現在・過去・未来
by
増田 亨
PDF
ドメイン駆動設計 コアドメインを語り合ってみよう
by
増田 亨
マルチテナント化で知っておきたいデータベースのこと
by
Amazon Web Services Japan
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
例外設計における大罪
by
Takuto Wada
シリコンバレーの「何が」凄いのか
by
Atsushi Nakada
AWSで作る分析基盤
by
Yu Otsubo
ユーザーストーリー駆動開発で行こう。
by
toshihiro ichitani
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
Dockerからcontainerdへの移行
by
Kohei Tokunaga
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
IT系エンジニアのためのプレゼンテーション入門
by
Masahito Zembutsu
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
by
Jun-ichi Sakamoto
DockerとPodmanの比較
by
Akihiro Suda
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
ドメイン駆動設計という設計スタイル
by
増田 亨
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
Lean coffee
by
Takeshi Arai
オブジェクト指向プログラミングの現在・過去・未来
by
増田 亨
ドメイン駆動設計 コアドメインを語り合ってみよう
by
増田 亨
Similar to レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
PDF
ドメイン駆動設計 本格入門
by
増田 亨
PDF
ドメイン駆動設計をゲーム開発に活かす
by
増田 亨
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
PDF
ドメイン駆動で開発する ラフスケッチから実装まで
by
増田 亨
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
PDF
ソフトウェアの核心にある複雑さに立ち向かう
by
増田 亨
PDF
Python におけるドメイン駆動設計(戦術面)の勘どころ
by
Junya Hayashi
PDF
ドメイン駆動設計とは何か 【入門編】
by
増田 亨
PDF
「ドメイン駆動設計」の複雑さに立ち向かう
by
増田 亨
PDF
ドメイン駆動設計入門
by
増田 亨
PDF
RDRA DDD Agile
by
増田 亨
PDF
いまなぜドメイン駆動設計か
by
増田 亨
PDF
ドメイン駆動設計 複雑さに立ち向かう
by
増田 亨
PDF
実践に向けたドメイン駆動設計のエッセンス
by
増田 亨
PPT
ドメインロジックの実装方法とドメイン駆動設計
by
Tadayoshi Sato
PDF
私がドメイン駆動設計をやる理由
by
増田 亨
PDF
ドメイン駆動設計 思えば遠くにきたもんだ
by
増田 亨
PDF
20130202 ドメイン駆動設計読書会at名古屋のお誘い
by
Ryo RKTM
PPTX
ドメイン駆動設計入門
by
KenjiroUehara
PDF
実践に向けたドメイン駆動設計のエッセンス
by
GuildWorks
ドメイン駆動設計 本格入門
by
増田 亨
ドメイン駆動設計をゲーム開発に活かす
by
増田 亨
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
ドメイン駆動で開発する ラフスケッチから実装まで
by
増田 亨
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
ソフトウェアの核心にある複雑さに立ち向かう
by
増田 亨
Python におけるドメイン駆動設計(戦術面)の勘どころ
by
Junya Hayashi
ドメイン駆動設計とは何か 【入門編】
by
増田 亨
「ドメイン駆動設計」の複雑さに立ち向かう
by
増田 亨
ドメイン駆動設計入門
by
増田 亨
RDRA DDD Agile
by
増田 亨
いまなぜドメイン駆動設計か
by
増田 亨
ドメイン駆動設計 複雑さに立ち向かう
by
増田 亨
実践に向けたドメイン駆動設計のエッセンス
by
増田 亨
ドメインロジックの実装方法とドメイン駆動設計
by
Tadayoshi Sato
私がドメイン駆動設計をやる理由
by
増田 亨
ドメイン駆動設計 思えば遠くにきたもんだ
by
増田 亨
20130202 ドメイン駆動設計読書会at名古屋のお誘い
by
Ryo RKTM
ドメイン駆動設計入門
by
KenjiroUehara
実践に向けたドメイン駆動設計のエッセンス
by
GuildWorks
More from 増田 亨
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
PDF
ビジネスルールの複雑さに立ち向かう
by
増田 亨
PDF
ドメインオブジェクトの設計ガイドライン
by
増田 亨
PDF
アジャイルなソフトウェア設計を目指して
by
増田 亨
PDF
ソフトウェア開発のやり方の改善
by
増田 亨
PDF
プロダクトづくりのためのソフトウェア設計スタイル
by
増田 亨
PDF
ソフトウェア設計の学び方を考える
by
増田 亨
PDF
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
by
増田 亨
PDF
DDD sample code explained in Java
by
増田 亨
PDF
現場で役立つシステム設計の原則
by
増田 亨
PDF
現場で役立つシステム設計の原則
by
増田 亨
PDF
毎日が越境だ!
by
増田 亨
PDF
SoR 2.0 基幹システムの再定義と再構築
by
増田 亨
PDF
越境する情シス:進化可能なアーキテクチャを手に入れる
by
増田 亨
PDF
事業活動モデル・システム機能モデル・ビジネスロジックの記述
by
増田 亨
PDF
SoR 2.0 summary
by
増田 亨
PDF
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
by
増田 亨
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
ビジネスルールの複雑さに立ち向かう
by
増田 亨
ドメインオブジェクトの設計ガイドライン
by
増田 亨
アジャイルなソフトウェア設計を目指して
by
増田 亨
ソフトウェア開発のやり方の改善
by
増田 亨
プロダクトづくりのためのソフトウェア設計スタイル
by
増田 亨
ソフトウェア設計の学び方を考える
by
増田 亨
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
by
増田 亨
DDD sample code explained in Java
by
増田 亨
現場で役立つシステム設計の原則
by
増田 亨
現場で役立つシステム設計の原則
by
増田 亨
毎日が越境だ!
by
増田 亨
SoR 2.0 基幹システムの再定義と再構築
by
増田 亨
越境する情シス:進化可能なアーキテクチャを手に入れる
by
増田 亨
事業活動モデル・システム機能モデル・ビジネスロジックの記述
by
増田 亨
SoR 2.0 summary
by
増田 亨
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
by
増田 亨
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
1.
レガシーの複雑さに立ち向かう ドメイン駆動設計のアプローチ 2019-6-1 ギルドワークス 増田 亨 Legacy
Code Meetup Kagoshima 2019
2.
ドメイン駆動設計でなぜつくるのか? 22019/6/1
3.
進化を続けるソフトウェアを手に入れる ソフトウェアの変更を楽で安全にする 2019/6/1 3 この価値観に振り切っている リリース後、あまりコードを変えない/変えられない、という世界とは別のアプローチ
4.
ドメイン駆動設計の考え方 2019/6/1 4
5.
ソフトウェアの核心にある 複雑さに立ち向かう 2019/6/1 5
6.
核心にある複雑さ 2019/6/1 6 ここに焦点を合わせて集中する その効果が、全体の構造の改善に波及する
7.
ソフトウェアの複雑さは ビジネス活動の複雑さに由来する ビジネスルール:ビジネスの活動を駆動し、制約する約束事 ドメインロジック:ビジネスルールをコードで表現したもの ドメイン駆動設計の考え方 2019/6/1 7 中でもビジネスルールの複雑さが ソフトウェアの複雑さの根本原因
8.
核心にある複雑さを 適切に扱う 核心と周辺との 依存関係が明確になる 全体の構造の 改善に波及する 周辺の 複雑さが軽減される 2019/6/1 8 ビジネスルールの複雑さ
9.
核心にある複雑さをどう扱うか? 2019/6/1 9 ビジネスルールの複雑さ
10.
核心にある複雑さ に立ち向かう ビジネスの活動を 継続的に学ぶ モデルと実装を 密に結合する ドメイン層を 独立させる コアドメインに 集中する システム間の秩序の 改善を続ける ビジネスを 深く洞察する ビジネスルールの複雑さ 2019/6/1 10
11.
レガシーコードの改善に ドメイン駆動設計は役に立つか? 2019/6/1 11
12.
即効性はない 2019/6/1 12
13.
じわじわ効いてくる 2019/6/1 13
14.
レガシーコード 2019/6/1 14
15.
どこに何が書いてあるか、わかりにくい ひとつの修正が、あちこちに影響する 変更が障害を引き起こす 2019/6/1 15
16.
変更がやっかいで危険 2019/6/1 16
17.
ドメイン駆動設計のアプローチで レガシーに立ち向かってみた 2019/6/1 17
18.
心の準備 手がかりを 見つける 区分値の 調査と分析 導出項目の 調査と分析 中核を見極める 中核だけを 実装してみる 複雑さの核心に メスを入れる アプリケーションを 組み立てなおす 2019/6/1 18
19.
こころの準備 2019/6/1 19
20.
✓ありがちな設計 ➢トランザクションスクリプト(入出力機能単位のモジュール) ➢バッチ処理によるつじつまあわせ ➢テーブルは更新可能なデータファイル(重複と不整合) ✓ありがちな状況 ➢設計や分析の資料はない/あっても古くてコードと一致していない ➢命名規約は、番号重視 and/or 省略重視
( KBN01 ) ➢使われていないロジック、データ、区分が混在 ✓最初から、こういうもんだと思って取り組む ➢期待しない ➢恨まない 2019/6/1 20
21.
手がかりを見つける 2019/6/1 21
22.
✓実データ、実画面、実帳票、実ファイル ➢実際に使われているデータ(事実の記録)が最大の手がかり ➢プログラムの意図は、コードからは読み取りにくい そういう設計のスタイルだから コードは意図の表現ではなく、データ処理手続きの表明 ✓目のつけどころ ➢区分値 ビジネスルールの複雑さの源泉(if文, switch文) ➢導出項目
ビジネスルールに基づいた計算や判定の結果 2019/6/1 22
23.
区分値の調査と分析 2019/6/1 23
24.
✓コードに書かれたif文やswitch文と格闘する前に、 区分体系を徹底的に調査する ✓データベースの区分カラム ➢GROUP BY 句で、実際のデータ内容の確認 ➢区分によって、使うカラム/使わないカラム、意味の異なるカラムの特定 ✓画面の区分表示、区分選択ボックス ➢データベースの区分カラムとの対応 ➢業務的な使い方の確認 2019/6/1
24
25.
導出項目の調査と分析 2019/6/1 25
26.
✓導出項目の特定 ➢ビジネスルールにもとづいた計算や判定の結果 金額、数量、期日、場所、区分、… ➢画面に表示された導出項目 ➢データベースに記録された導出項目、導出レコード ✓導出ルール(計算ルールや判定ルール)を調べる ➢業務マニュアル/利用ガイド/料金表 … ➢ソースコード ➢ヒアリング(ありえないデータ、ありえない結果を判断できる人) 2019/6/1 26
27.
中核を見極める 2019/6/1 27
28.
✓導出のロジック(計算式とif文/switch文)に焦点を合わせる ✓単なるデータの記録と参照は、ばっさりスコープからはずす ➢データベースは、計算と判定に使う項目の記録のみを対象にする ➢画面も、計算と判定に使うための入力と、導出結果のみを対象にする ✓ソースコード中の、導出ロジックの記述場所を特定する ➢区分値を使った if文/swtich文 ➢if文/switch文の評価式の値を算出している個所 2019/6/1 28
29.
中核だけを実装してみる 2019/6/1 29
30.
✓データベース ➢導出に使うデータと、導出結果の記録に絞り込んだデータベースを用意する ➢FACTを正しく記録するためのテーブル群を新規に設計 イミュータブルデータモデル データベース制約を徹底する 特に NOT NULL
制約 ➢現行のデータベースから必要なFACTデータを複製する仕組みづくり ✓導出ロジックのプログラミングと検証 ➢FACT駆動で作成した新データベースを使って、必要な計算と判定ができるプ ログラムを開発する(UIは作らない) ➢計算結果・判定結果を、既存データベースの該当カラムと突き合わせる 2019/6/1 30
31.
複雑さの核心に切り込む 2019/6/1 31
32.
✓既存の区分体系 ➢未使用の区分 ➢今となっては意図が不明な区分 ➢複数の区分軸の混在 ✓区分体系の整理 ➢未使用を使わない ➢意図不明もいったん使わない ➢明らかな例外を、事前処理で除外する ➢残った区分を論理的に分解してみる 2軸か3軸の組み合わせになっていることが多い すべての組み合わせが網羅されていないことが多い(その理由を分析する) 2019/6/1 32
33.
アプリケーションを組み立てなおす 2019/6/1 33
34.
✓中核は手に入った ➢FACTを記録したテーブル群(と実データ) ➢FACTを使った導出プログラム(計算モデル) ➢論理的に整理しなおした区分 ➢それらを使った計算サービスや判定サービス ✓中核と画面や外部インタフェースをつなげる ➢選択肢1:中核に合わせて、画面や外部インタフェースを作り直す ➢選択肢2:既存の画面モジュール/外部接続モジュールから中核を呼び出す ✓記録して参照するだけのデータ群の扱い ➢選択肢1:中核の周辺に追加する ➢選択肢2:既存の処理にまかせる 2019/6/1 34
35.
心の準備 手がかりを 見つける 区分値の 調査と分析 導出項目の 調査と分析 中核を見極める 中核だけを 実装してみる 複雑さの核心に メスを入れる アプリケーションを 組み立てなおす 2019/6/1 35
36.
手ごたえは十分だった このやり方を積み重ねれば突破できそうな自信はあった まわりの理解を得ることに失敗した チーム内での試行錯誤に集中しすぎた 2019/6/1 36
37.
もう一回やれば、段取りや作業の見通しを事前に説明し、 進捗状況を適宜、報告することはできそう 一方で、短期的で劇的な効果は望めない そこの同意を取り付けるのは難しいかもしれない 2019/6/1 37
38.
いちばんの成果は、開発者のビジネス理解が進み コードやデータの全体の見通しが改善したこと 数量化・可視化は難しいが もう一度やるなら やはり、このアプローチでやりたい 2019/6/1 38
Download