Skip to main content
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
EN
Upload
Download free for 30 days
Sign in
Uploaded by
増田 亨
PDF, PPTX
15,464 views
世界でいちばんわかりやすいドメイン駆動設計
エヴァンス本を読んだことがない人、ネット上の情報を聞きかじったことがある程度の人、そんな人たちを対象に、ドメイン駆動設計について、わかりやすく説明してみました。
Software
◦
Related topics:
Object-Oriented Concepts
•
Read more
12
Save
Share
Embed
Save to Drive
Download now
Download as PDF, PPTX
1
/ 44
2
/ 44
3
/ 44
4
/ 44
5
/ 44
6
/ 44
7
/ 44
8
/ 44
9
/ 44
10
/ 44
11
/ 44
12
/ 44
13
/ 44
14
/ 44
15
/ 44
16
/ 44
17
/ 44
18
/ 44
19
/ 44
20
/ 44
More Related Content
PDF
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
21 slides
11.7K views
PDF
ドメイン駆動設計 基本を理解する
by
増田 亨
134 slides
119K views
PDF
ドメイン駆動設計 本格入門
by
増田 亨
139 slides
46.9K views
PDF
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
by
Koichiro Matsuoka
153 slides
8.4K views
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
41 slides
22.2K views
PDF
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
89 slides
49.3K views
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
45 slides
51.8K views
PDF
オブジェクト指向プログラミングのためのモデリング入門
by
増田 亨
47 slides
39.3K views
ドメイン駆動設計に15年取り組んでわかったこと
by
増田 亨
21 slides
11.7K views
ドメイン駆動設計 基本を理解する
by
増田 亨
134 slides
119K views
ドメイン駆動設計 本格入門
by
増田 亨
139 slides
46.9K views
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
by
Koichiro Matsuoka
153 slides
8.4K views
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
41 slides
22.2K views
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
89 slides
49.3K views
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
45 slides
51.8K views
オブジェクト指向プログラミングのためのモデリング入門
by
増田 亨
47 slides
39.3K views
What's hot
PDF
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
89 slides
15.1K views
PDF
正しいものを正しく作る塾-設計コース
by
増田 亨
9 slides
10.3K views
PDF
ドメインオブジェクトの設計ガイドライン
by
増田 亨
10 slides
3.9K views
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
60 slides
44.8K views
PDF
ドメイン駆動で開発する ラフスケッチから実装まで
by
増田 亨
103 slides
16.2K views
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
45 slides
174.7K views
PDF
ドメイン駆動設計 コアドメインを語り合ってみよう
by
増田 亨
24 slides
2.7K views
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
by
Koichiro Matsuoka
65 slides
51.4K views
PDF
ソフトウェア開発のやり方の改善
by
増田 亨
26 slides
7.2K views
PDF
ドメイン駆動設計をゲーム開発に活かす
by
増田 亨
45 slides
5.2K views
PDF
ドメイン駆動設計の正しい歩き方
by
増田 亨
61 slides
26.1K views
PPTX
Spanner移行について本気出して考えてみた
by
techgamecollege
59 slides
1.9K views
PDF
ソフトウェア設計の学び方を考える
by
増田 亨
39 slides
25.4K views
PPTX
テストコードの DRY と DAMP
by
Yusuke Kagata
11 slides
4.5K views
PDF
オブジェクト指向エクササイズのススメ
by
Yoji Kanno
85 slides
60.9K views
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
by
Koichiro Matsuoka
57 slides
3.6K views
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
95 slides
32.7K views
PDF
アジャイルなソフトウェア設計を目指して
by
増田 亨
94 slides
12.3K views
PDF
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
by
A AOKI
127 slides
26.1K views
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
89 slides
110K views
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
89 slides
15.1K views
正しいものを正しく作る塾-設計コース
by
増田 亨
9 slides
10.3K views
ドメインオブジェクトの設計ガイドライン
by
増田 亨
10 slides
3.9K views
マイクロサービス 4つの分割アプローチ
by
増田 亨
60 slides
44.8K views
ドメイン駆動で開発する ラフスケッチから実装まで
by
増田 亨
103 slides
16.2K views
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
45 slides
174.7K views
ドメイン駆動設計 コアドメインを語り合ってみよう
by
増田 亨
24 slides
2.7K views
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
by
Koichiro Matsuoka
65 slides
51.4K views
ソフトウェア開発のやり方の改善
by
増田 亨
26 slides
7.2K views
ドメイン駆動設計をゲーム開発に活かす
by
増田 亨
45 slides
5.2K views
ドメイン駆動設計の正しい歩き方
by
増田 亨
61 slides
26.1K views
Spanner移行について本気出して考えてみた
by
techgamecollege
59 slides
1.9K views
ソフトウェア設計の学び方を考える
by
増田 亨
39 slides
25.4K views
テストコードの DRY と DAMP
by
Yusuke Kagata
11 slides
4.5K views
オブジェクト指向エクササイズのススメ
by
Yoji Kanno
85 slides
60.9K views
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
by
Koichiro Matsuoka
57 slides
3.6K views
ドメインオブジェクトの見つけ方・作り方・育て方
by
増田 亨
95 slides
32.7K views
アジャイルなソフトウェア設計を目指して
by
増田 亨
94 slides
12.3K views
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
by
A AOKI
127 slides
26.1K views
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
89 slides
110K views
Similar to 世界でいちばんわかりやすいドメイン駆動設計
PDF
ドメイン駆動設計とは何か 【入門編】
by
増田 亨
40 slides
13.6K views
PDF
「ドメイン駆動設計」の複雑さに立ち向かう
by
増田 亨
133 slides
32.7K views
PDF
私がドメイン駆動設計をやる理由
by
増田 亨
25 slides
23.1K views
PDF
ドメイン駆動設計入門
by
増田 亨
53 slides
28.9K views
PDF
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
by
増田 亨
38 slides
3.8K views
PDF
実践に向けたドメイン駆動設計のエッセンス
by
増田 亨
99 slides
26.3K views
PDF
実践に向けたドメイン駆動設計のエッセンス
by
GuildWorks
99 slides
1K views
PDF
QCon Tokyo 2013
by
増田 亨
37 slides
4.2K views
PDF
RDRA DDD Agile
by
増田 亨
47 slides
6.5K views
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
83 slides
31.1K views
PPT
ドメインロジックの実装方法とドメイン駆動設計
by
Tadayoshi Sato
48 slides
15.1K views
PDF
ドメイン駆動設計の捉え方 20150718
by
Mao Ohnishi
53 slides
5.6K views
PDF
ソフトウェアの核心にある複雑さに立ち向かう
by
増田 亨
65 slides
11.1K views
PDF
20130202 ドメイン駆動設計読書会at名古屋のお誘い
by
Ryo RKTM
19 slides
443 views
PPTX
ドメイン駆動設計入門
by
KenjiroUehara
28 slides
138 views
PDF
ドメイン駆動設計入門
by
Yukei Wachi
60 slides
3.3K views
PDF
いまなぜドメイン駆動設計か
by
増田 亨
23 slides
15.7K views
PDF
ドメイン駆動設計入門
by
Takuya Kitamura
22 slides
45.8K views
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
113 slides
33.3K views
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
55 slides
139.6K views
ドメイン駆動設計とは何か 【入門編】
by
増田 亨
40 slides
13.6K views
「ドメイン駆動設計」の複雑さに立ち向かう
by
増田 亨
133 slides
32.7K views
私がドメイン駆動設計をやる理由
by
増田 亨
25 slides
23.1K views
ドメイン駆動設計入門
by
増田 亨
53 slides
28.9K views
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
by
増田 亨
38 slides
3.8K views
実践に向けたドメイン駆動設計のエッセンス
by
増田 亨
99 slides
26.3K views
実践に向けたドメイン駆動設計のエッセンス
by
GuildWorks
99 slides
1K views
QCon Tokyo 2013
by
増田 亨
37 slides
4.2K views
RDRA DDD Agile
by
増田 亨
47 slides
6.5K views
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
83 slides
31.1K views
ドメインロジックの実装方法とドメイン駆動設計
by
Tadayoshi Sato
48 slides
15.1K views
ドメイン駆動設計の捉え方 20150718
by
Mao Ohnishi
53 slides
5.6K views
ソフトウェアの核心にある複雑さに立ち向かう
by
増田 亨
65 slides
11.1K views
20130202 ドメイン駆動設計読書会at名古屋のお誘い
by
Ryo RKTM
19 slides
443 views
ドメイン駆動設計入門
by
KenjiroUehara
28 slides
138 views
ドメイン駆動設計入門
by
Yukei Wachi
60 slides
3.3K views
いまなぜドメイン駆動設計か
by
増田 亨
23 slides
15.7K views
ドメイン駆動設計入門
by
Takuya Kitamura
22 slides
45.8K views
3週連続DDDその1 ドメイン駆動設計の基本を理解する
by
増田 亨
113 slides
33.3K views
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
55 slides
139.6K views
More from 増田 亨
PDF
事業活動モデル・システム機能モデル・ビジネスロジックの記述
by
増田 亨
7 slides
1.7K views
PDF
オブジェクト指向プログラミングの現在・過去・未来
by
増田 亨
39 slides
7.1K views
PDF
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
by
増田 亨
43 slides
14.4K views
PDF
ドメイン駆動設計という設計スタイル
by
増田 亨
63 slides
17.7K views
PDF
プロダクトづくりのためのソフトウェア設計スタイル
by
増田 亨
29 slides
4.7K views
PDF
ビジネスルールの複雑さに立ち向かう
by
増田 亨
53 slides
12.6K views
PDF
DDD sample code explained in Java
by
増田 亨
24 slides
22.4K views
PDF
SoR 2.0 summary
by
増田 亨
8 slides
1.4K views
PDF
毎日が越境だ!
by
増田 亨
51 slides
10.6K views
PDF
SoR 2.0 基幹システムの再定義と再構築
by
増田 亨
58 slides
9.4K views
PDF
越境する情シス:進化可能なアーキテクチャを手に入れる
by
増田 亨
31 slides
5.9K views
PDF
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
by
増田 亨
28 slides
4K views
PDF
現場で役立つシステム設計の原則
by
増田 亨
11 slides
8.9K views
PDF
現場で役立つシステム設計の原則
by
増田 亨
21 slides
6.7K views
事業活動モデル・システム機能モデル・ビジネスロジックの記述
by
増田 亨
7 slides
1.7K views
オブジェクト指向プログラミングの現在・過去・未来
by
増田 亨
39 slides
7.1K views
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
by
増田 亨
43 slides
14.4K views
ドメイン駆動設計という設計スタイル
by
増田 亨
63 slides
17.7K views
プロダクトづくりのためのソフトウェア設計スタイル
by
増田 亨
29 slides
4.7K views
ビジネスルールの複雑さに立ち向かう
by
増田 亨
53 slides
12.6K views
DDD sample code explained in Java
by
増田 亨
24 slides
22.4K views
SoR 2.0 summary
by
増田 亨
8 slides
1.4K views
毎日が越境だ!
by
増田 亨
51 slides
10.6K views
SoR 2.0 基幹システムの再定義と再構築
by
増田 亨
58 slides
9.4K views
越境する情シス:進化可能なアーキテクチャを手に入れる
by
増田 亨
31 slides
5.9K views
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
by
増田 亨
28 slides
4K views
現場で役立つシステム設計の原則
by
増田 亨
11 slides
8.9K views
現場で役立つシステム設計の原則
by
増田 亨
21 slides
6.7K views
世界でいちばんわかりやすいドメイン駆動設計
1.
世界一わかりやすいドメイン駆動設計 ドメインを学び 学んだことをコードで表現する ギルドワークス 増田 亨 2018/9/14
1
2.
ドメイン駆動設計とは? 22018/9/14 What is Domain-Driven
Design
3.
ソフトウェア設計の 考え方とやり方の一つ 32018/9/14
4.
ソフトウェア設計の一般原則 関心の分離 Separation of Concerns モジュール構造 modular
construction 全体を複数の関心事に分解する それぞれの関心事を独立したモジュールとして実装する モジュールを組み合わせて全体を構築する 42018/9/14
5.
良い設計 • 変更が楽で安全になる – どこに何が書いてあるかわかりやすい –
変更の影響範囲を特定しやすい – 変更の影響範囲が狭い • ビジネス価値を生む – 変更が容易(低コスト・低リスク)であれば – サービスの改善・拡張が加速 ⇒ 顧客満足、差別化 – 事業の運営方針や戦術の選択肢が広がる 2018/9/14 5
6.
ドメイン駆動設計のアプローチ 2018/9/14 6
7.
ドメインロジックに焦点を合わせる オブジェクト指向のモジュール構造 インクリメンタルに設計を進める ドメイン駆動設計のアプローチ 2018/9/14 7
8.
ドメインロジックに焦点を合わせる オブジェクト指向のモジュール構造 インクリメンタルに設計を進める ドメイン駆動設計のアプローチ 2018/9/14 8
9.
設計のアプローチの比較 ドメイン駆動設計 従来の設計 ドメインロジックに 焦点を合わせる 入出力に 焦点を合わせる オブジェクト指向のモジュール構造 手続き型のモジュール構造 インクリメンタルに設計する
アップフロントに設計する 2018/9/14 9
10.
設計のアプローチの比較 ドメイン駆動設計 従来の設計 ドメインロジックに 焦点を合わせる 入出力に 焦点を合わせる オブジェクト指向のモジュール構造 手続き型のモジュール構造 インクリメンタルに設計する
アップフロントに設計する 2018/9/14 10 アプリケーション全体としてカバーする範囲は同じ どこに焦点を合わせるかの違い
11.
関心事の違い ドメイン駆動設計 従来の設計 ドメインロジックに焦点 入出力に焦点 関心事
関心事 ドメインの状況を表す値の種類 ユーザインタフェース 値を使った計算ロジック/判定ロジック データベース 計算結果/判定結果の表現方法 通信 2018/8/22 11
12.
ドメインロジックに焦点を合わせる どういうこと? 2018/9/14 12
13.
ドメインロジック • ビジネスで扱うデータを使った計算ロジックや 判定ロジックのこと (業務アプリの場合) •
従来の設計では、機能分割から導いた 手続き型のモジュールの一部として記述 • ドメイン駆動設計では、ビジネスロジックだけ を集め独立したモジュールに記述する 2018/9/14 13
14.
入出力の関心事 vs. ドメインロジック •
入出力の関心事→データモデル+CRUD操作 • 画面項目定義 • テーブル定義 • 登録機能、参照機能、編集機能、削除機能、… • ドメインロジックの関心事→計算モデル • 計算する値の種類 • 計算の種類 • 計算の組み合わせ方 2018/9/14 14
15.
ドメインロジックの構成要素 ビジネスを構成する概念(関心の対象) 顧客、商品、 販売、出荷、請求、… ビジネスの状況や構造を表現する「値の種類」 金額、数量、日付、日数、… 会員区分、商品区分、取引区分、… 値を使った計算や判定 金額計算、数量計算、日数計算、… 顧客タイプ判定、処理区分判定、有効性判定、… 2018/9/14 15
16.
入出力からドメインロジックを分離 プレゼンテーション層 データソース層 アプリケーション層 入出力処理 ルールの実行 次のアクションの指示 画面入出力 Web API データベース入出力 メッセージ送信 入出力定義して実装 機能分割して実装 従来のアプローチで取り組める 計算する値の種類 + 計算ロジック 判定ロジック ドメインロジックを 分析設計して実装 ここに焦点を合わせる 金額、数量、日付、日数、… 顧客タイプ、商品カテゴリ、取引区分、… 一致不一致、大小、境界値、 加算減算、乗算、除算、 値とリテラルの変換 論理演算、集合演算 計算・判定ルールの記述を 独立したモジュールに 分離する 2018/9/14 16
17.
ドメインロジックに焦点を合わせる理由 17 1. ソフトウェアが複雑になる原因はドメインロジックの複雑さにある 入出力処理とドメインロジックの記述が混在すると どこに、どんなビジネスロジックを書いているか、わかりにくい
変更の影響があちこちに波及して、変更が厄介で危険になる 2. ドメインロジックを入出力から分離する ドメインロジックの輪郭と構造がはっきりしてくる ドメインロジックを分離した入出力側の記述はシンプルになる 1. ソフトウェア全体の見通しがよくなり、変更が楽で安全になる つまらない不具合が減る(すっきりとしたコードになる) 修正や拡張が簡単にできるようになる(影響範囲が狭い、推測しや すい) 2018/9/14
18.
オブジェクト指向のモジュール構造 どういうこと? 2018/9/14 18
19.
ソフトウェアのモジュール構造 ソースコードを扱いやすいかたまりに分割し コードのかたまりごとに別ファイルに記述する モジュール間(ソースファイル間)の依存を できるだけ、小さく/少なくする モジュール単独で意味が理解でき 独立して実装し試験できることが望ましい 2018/9/14 19
20.
モジュール構造:2つのアプローチ どこに着眼してソースを分割し整理するか? 入出力処理 vs 計算する値の種類 2018/9/14 20
21.
入出力処理のモジュール構造 • 機能分割し、機能ごとに入力仕様と出力仕様を定義 する • 機能ごとに、入力から出力への手続きを 時系列に記述する 手続き型のモジュール構造 トランザクションスクリプト •
複数の機能に共通する処理(サブルーチン)を 集めたサブモジュールを作ることもある 2018/9/14 21
22.
オブジェクト指向のモジュール化 • 「型」(値の種類)に注目してモジュール化 – 標準ライブライリで定義済の型(値の種類) •
BigDecimal, LocalDate, List<T>, … – アプリケーション固有の型 • 金額型、数量型、有効期限型、商品区分型、… • 「型」は3つの要素で定義する – 値の種類の「名前」 – その値に有効な計算(演算) – 有効な値の範囲 • クラス(class)は「型」を記述する仕組み 2018/9/14 22
23.
オブジェクト指向のモジュール化 • 「型」(値の種類)に注目してモジュール化 – 標準ライブライリで定義済の型(値の種類) •
BigDecimal, LocalDate, List<T>, … – アプリケーション固有の型 • 金額型、数量型、有効期限型、商品区分型、… • 「型」は3つの要素で定義する – 値の種類の「名前」 – その値に有効な計算(演算) – 有効な値の範囲 • クラス(class)は「型」を記述する仕組み 2018/9/14 23
24.
「型」を定義する 1. 「値の種類」を見つける – 金額、数量、日付、日数、… –
商品種類、顧客タイプ、取引区分、… – 割引率、ポイント、… 2. それぞれの値に有効な計算(演算)を特定する – 一致/不一致の判定 – 大小の判定 – 境界値(最大最小)の判定 – 足し算、引き算 – 掛け算 – 割り算 – 値とリテラルの変換 – 論理演算 – 集合演算 2018/9/14 24
25.
「型」を定義する 1. 「値の種類」を見つける – 金額、数量、日付、日数、… –
商品種類、顧客タイプ、取引区分、… – 割引率、ポイント、… 2. それぞれの値に有効な計算(演算)を特定する – 一致/不一致の判定 – 大小の判定 – 境界値(最大最小)の判定 – 足し算、引き算 – 掛け算 – 割り算 – 値とリテラルの変換 – 論理演算 – 集合演算 2018/9/14 25 値の種類は多い→複雑さの原因 値の種類を整理すれば ドメインロジックの見通しがよくなる
26.
「型」を定義する 1. 「値の種類」を見つける – 金額、数量、日付、日数、… –
商品種類、顧客タイプ、取引区分、… – 割引率、ポイント、… 2. それぞれの値に有効な計算(演算)を特定する – 一致/不一致の判定 – 大小の判定 – 境界値(最大最小)の判定 – 足し算、引き算 – 掛け算 – 割り算 – 値とリテラルの変換 – 論理演算 – 集合演算 2018/9/14 26 値の種類は多い→複雑さの原因 値の種類を整理すれば ドメインロジックの見通しがよくなる 計算の種類は多くない 特定の値に必要な計算はさらに少ない 入出力処理でモジュール化すると 同じ計算があちこちに分散し重複する 型(値の種類)に計算を集めれば 一か所のみの記述になる
27.
型を組み合わせてロジックを表現 • 金額=単価×数量 – Amount型、UnitPrice型、Quantity型 –
メソッドの設計 UnitPrice#multiply( Quantity ) : Amount • 明細=(品名、単価、数量、金額) – LineItem型、Product型、UnitPrice型、Amount型 – コンストラクタの設計 LineItem(Product, UnitPrice, Quantity) 2018/9/14 27
28.
型のグルーピング • 金額パッケージ – Amount型、UnitPrice型、… •
数量パッケージ – Quantity型、Unit型、PieceUnit型、BoxUnit型、… • 注文パッケージ – PurchaseOrder型、LineItem型、… – ShipTo型、InvoiceTo型、… • 注文処理パッケージ – EventType型、StatusType型、… (イベントと状態遷移) – DeliveryType型、InvoicingType型、… (出荷区分、請求区分) 2018/9/14 28
29.
型のグルーピング • 金額パッケージ – Amount型、UnitPrice型、… •
数量パッケージ – Quantity型、Unit型、PieceUnit型、BoxUnit型、… • 注文パッケージ – PurchaseOrder型、LineItem型、… – ShipTo型、InvoiceTo型、… • 注文処理パッケージ – EventType型、StatusType型、… (イベントと状態遷移) – DeliveryType型、InvoicingType型、… (出荷区分、請求区分) 2018/9/14 29 ドメインロジックの 全体を俯瞰し 概念の輪郭を描く
30.
同じ名前で異なる型を扱う 部分型:異なる型を、同じ型名で扱う interface Unit class PriceUnit
implements Unit class BoxUnit implements Unit 多重定義:同じメソッド名で異なる型を受け取る UnitPrice#multiply(Piece) UnitPrice#multiply(Box) 総称性:一つのクラス名で型のバリエーションを扱う List<Amount>, List<Quantity>, … 2018/9/14 30
31.
オブジェクト指向のモジュール構造 • クラスを使って型を定義する • 型を組み合わせて型を作る •
パッケージを使って型をグルーピングする • 同じ名前で異なる型を扱う(ポリモフィズム) 部分型(サブタインピング) 多重定義(オーバーロード) 総称性(ジェネリクス) 2018/9/14 31
32.
インクリメンタルに設計を進める どういうこと? 2018/9/14 32
33.
最初から良い設計は見つからない 開発の初期は、ドメインの知識が足りない 最初に書いたコードは、後から見直すと もっと良い書き方が見つかる 初期の要求はあいまいで抜け漏れが多い 時間とともに具体的で詳細になっていく 要求は、時間とともに変化する 2018/9/14 33
34.
アップフロントの設計 • 予測と予断に基づく設計 • リスク –
要求やビジネスルールの知識と理解が不足した段階 で、ソフトウェアの構造を決めてしまう – その結果、 ソフトウェア構造の確定後に発見された、要求やビジ ネスルールを、どこかに無理やりねじ込む – どこに何が書いてあるかわかりにくく、変更の影響範 囲が特定しにくい 2018/9/14 34
35.
インクリメンタルに設計を進める • 毎日、 クラス(モジュール)を発見し、実装し、 少し改善する • 毎日、 モジュール構造(クラスとクラス関係)を検討し、 少し改善する •
毎日、 全体のモジュール構造を俯瞰し、 少し改善する 2018/9/14 35
36.
インクリメンタルに設計を進める • 毎日、 問題領域の知識を少し広げ、少し掘り下げる • 毎日、 一度書いたコードを見直し、少し改善する •
時間とともに、具体的になる要求を、 時間とともに、コードに反映する • 時間とともに、変化する要求を、 時間とともに、コードに反映する 2018/9/14 36
37.
ドメインロジックに焦点を合わせる オブジェクト指向のモジュール構造 インクリメンタルに設計を進める ドメイン駆動設計のアプローチ 2018/9/14 37
38.
やってみよう 2018/9/14 38
39.
サンプルコード レンタル料金の計算 典型的な手続き型プログラミング 入出力とロジックの混在 ドメイン知識の暗黙化(開発者の脳内自動変換) ↓ オブジェクト指向のモジュール構造 入出力とドメインロジックの分離 ドメイン知識をコードで明示的に表現する 2018/9/14 39
40.
step by step 1.
計算ロジックの置き場所を改善する 2. ドメインロジックと入出力処理を分離する 3. 料金ルールを分析し深く理解する 4. クラス名でビジネスルールを語る 2018/9/14 40
41.
before 2018/9/14 41 ビジネスルールが見えない設計
42.
after 2018/9/14 42 型でビジネスルールを表現した設計
43.
三つの基本テクニック • 値オブジェクト – 値を持つクラスに計算ロジックを持たせる •
コレクションオブジェクト – 値のコレクションと、コレクションを操作するロジックを、 独立したクラスに分離する • 区分オブジェクト – 区分ごとの定数やロジックを別のクラスに分け、 条件分岐(if/switch)の記述をなくす/減らす 2018/9/14 43
44.
設計の改善テクニック • メソッドの抽出 • 名前の変更 •
説明用変数の導入 • クラスの抽出 • ロジックの移動 • コレクションのカプセル化 • タイプコードをクラスに置き換え • プレゼンテーションとモデルの分離 • 階層の抽出 2018/9/14 44