Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Masanobu Naruse BOTTOM UP DOMAIN DRIVEN DESIGN
Slide 2
Slide 2 text
もくじ • はじめに • 値オブジェクト • エンティティ • ドメインサービス • リポジトリ • アプリケーションサービス • ファクトリ • トランザクション • 集約 • アーキテクチャ • ドメイン駆動設計への誘い 2
Slide 3
Slide 3 text
はじめに 3 読んだ方はいらっしゃいますか
Slide 4
Slide 4 text
はじめに 4 読み切った方はいらっしゃいますか
Slide 5
Slide 5 text
はじめに 5 理解した方はいらっしゃいますか
Slide 6
Slide 6 text
はじめに | 辛さの原因 6 辛さの原因は?
Slide 7
Slide 7 text
はじめに | 辛さの原因 7 ユビキタス言語
Slide 8
Slide 8 text
はじめに | 辛さの原因 8 ユビキタス言語 ドメインエキスパート
Slide 9
Slide 9 text
はじめに | 辛さの原因 9 ユビキタス言語 ドメインエキスパート エンティティ
Slide 10
Slide 10 text
はじめに | 辛さの原因 10 ユビキタス言語 ドメインエキスパート エンティティ 値オブジェクト
Slide 11
Slide 11 text
はじめに | 辛さの原因 11 ユビキタス言語 ドメインエキスパート エンティティ 値オブジェクト ドメインサービス
Slide 12
Slide 12 text
はじめに | 辛さの原因 12 ユビキタス言語 ドメインエキスパート エンティティ 値オブジェクト ドメインサービス アプリケーションサービス
Slide 13
Slide 13 text
はじめに | 辛さの原因 13 ユビキタス言語 ドメインエキスパート エンティティ 値オブジェクト リポジトリ ファクトリ ドメインサービス アプリケーションサービス 集約
Slide 14
Slide 14 text
集約 はじめに | 辛さの原因 14 ユビキタス言語 ドメインエキスパート エンティティ 値オブジェクト ドメインサービス アプリケーションサービス リポジトリ ファクトリ 怖い
Slide 15
Slide 15 text
はじめに | 辛さの原因 15 ドメイン駆動設計 ?
Slide 16
Slide 16 text
はじめに | 辛さの原因 16 ドメイン駆動設計 オブジェクト指向の実践
Slide 17
Slide 17 text
はじめに | 辛さの原因 17 敬遠されるのは勿体ない ドメイン駆動設計 オブジェクト指向の実践
Slide 18
Slide 18 text
はじめに | 辛さの原因 18 怖い ? = 辛さの原因 = ? こと だらけ
Slide 19
Slide 19 text
はじめに | 辛さの原因 19 怖い 知らない = 辛さの原因 = 知らないこと だらけ
Slide 20
Slide 20 text
はじめに | 用語 20 用語
Slide 21
Slide 21 text
はじめに | 用語 21 用語
Slide 22
Slide 22 text
はじめに | 用語 22 マインド パターン 用語
Slide 23
Slide 23 text
はじめに | 用語 23 マインド パターン 感じるしかない 用語
Slide 24
Slide 24 text
はじめに | 用語 24 マインド パターン 感じるしかない 実装できる 用語
Slide 25
Slide 25 text
はじめに | 用語 25 用語と実装がイメージできれば 辛さは半分になるのでは?
Slide 26
Slide 26 text
はじめに | 用語 26 いきなり全容を説明しても 辛いから ボトムアップに解説したら 役に立ちそう
Slide 27
Slide 27 text
はじめに | 用語 27 いきなり全容を説明しても 辛いから ボトムアップに解説したら 役に立ちそう と考えて早一年 書籍化依頼こないかなー・・・ とか漠然と思ってました
Slide 28
Slide 28 text
はじめに | 記事 ボトムアップドメイン駆動設計 28 https://nrslib.com/bottomup-ddd/ https://nrslib.com/bottomup-ddd-2/ というわけで解説記事にしてみた
Slide 29
Slide 29 text
はじめに | 記事 ボトムアップドメイン駆動設計 29 https://nrslib.com/bottomup-ddd/ https://nrslib.com/bottomup-ddd-2/ というわけで解説記事にしてみた そもそもこの解説記事が辛い
Slide 30
Slide 30 text
はじめに | 記事 ボトムアップドメイン駆動設計 30 https://nrslib.com/bottomup-ddd/ https://nrslib.com/bottomup-ddd-2/ というわけで解説記事にしてみた そもそもこの解説記事が辛い
Slide 31
Slide 31 text
はじめに | 趣旨 31 今回のセミナーの趣旨
Slide 32
Slide 32 text
はじめに | 趣旨 32 イントロダクションはセミナーで 今回のセミナーの趣旨
Slide 33
Slide 33 text
はじめに | 趣旨 33 イントロダクションはセミナーで 細かい部分は記事で 今回のセミナーの趣旨
Slide 34
Slide 34 text
はじめに | 趣旨 34 イントロダクションはセミナーで 細かい部分は記事で マインドは書籍で 今回のセミナーの趣旨
Slide 35
Slide 35 text
はじめに | ゴール 35 ゴール Evans の本を読む下地を作る
Slide 36
Slide 36 text
値オブジェクト VALUE OBJECT
Slide 37
Slide 37 text
値オブジェクト 37 値って何ですか
Slide 38
Slide 38 text
値オブジェクト 38 例えば数値
Slide 39
Slide 39 text
値オブジェクト 39
Slide 40
Slide 40 text
値オブジェクト 40 ここは何していますか
Slide 41
Slide 41 text
値オブジェクト 41 例えば文字列
Slide 42
Slide 42 text
値オブジェクト 42
Slide 43
Slide 43 text
値オブジェクト 43 ここは何していますか
Slide 44
Slide 44 text
値オブジェクト 44 値の変更は代入
Slide 45
Slide 45 text
値オブジェクト 45 値の変更は代入 こんなことはしない
Slide 46
Slide 46 text
値オブジェクト 46 じゃあ 値を示すオブジェクトも 値らしくしよう
Slide 47
Slide 47 text
値オブジェクト 47 じゃあ 値を示すオブジェクトも 値らしくしよう 値オブジェクト
Slide 48
Slide 48 text
値オブジェクト | 値の性質 48 状態を不変に保つ 値同士の比較ができる 完全に交換可能である 値の性質
Slide 49
Slide 49 text
値オブジェクト | 状態を不変に保つ 49 状態を不変に保つ 値同士の比較ができる 完全に交換可能である 値の性質
Slide 50
Slide 50 text
値オブジェクト | 状態を不変に保つ 50 状態とは?
Slide 51
Slide 51 text
値オブジェクト | 状態を不変に保つ 51 状態 フィールド =
Slide 52
Slide 52 text
値オブジェクト | 状態を不変に保つ 52
Slide 53
Slide 53 text
値オブジェクト | 状態を不変に保つ 53 これらがダメなら
Slide 54
Slide 54 text
値オブジェクト | 状態を不変に保つ 54 これらがダメなら
Slide 55
Slide 55 text
値オブジェクト | 状態を不変に保つ 55 これもダメ これらがダメなら
Slide 56
Slide 56 text
値オブジェクト | 状態を不変に保つ 56
Slide 57
Slide 57 text
値オブジェクト | 状態を不変に保つ 57 値の変更は代入で
Slide 58
Slide 58 text
値オブジェクト | 状態を不変に保つ 58 値の変更は代入で
Slide 59
Slide 59 text
値オブジェクト | 状態を不変に保つ 59 メリット 不変であることそれ自体 ・可変な状態は取り扱いが難しい ・並行/並列処理では特に難しい ・キャッシュ可能 etc…
Slide 60
Slide 60 text
値オブジェクト | 値同士の比較ができる 60 値の性質 状態を不変に保つ 値同士の比較ができる 完全に交換可能である
Slide 61
Slide 61 text
値オブジェクト | 値同士の比較ができる 61 値の比較の仕方は?
Slide 62
Slide 62 text
値オブジェクト | 値同士の比較ができる 62 値の比較の仕方は?
Slide 63
Slide 63 text
値オブジェクト | 値同士の比較ができる 63 値の比較の仕方は? こうは書かない
Slide 64
Slide 64 text
値オブジェクト | 値同士の比較ができる 64 じゃあ値オブジェクトも こう書かない
Slide 65
Slide 65 text
値オブジェクト | 値同士の比較ができる 65 値のように表現すべき
Slide 66
Slide 66 text
値オブジェクト | 値同士の比較ができる 66 比較のための実装
Slide 67
Slide 67 text
値オブジェクト | 値同士の比較ができる 67 比較のための実装
Slide 68
Slide 68 text
値オブジェクト | 値同士の比較ができる 68 Snipet や Resharper などの Tool で生成 比較のための実装
Slide 69
Slide 69 text
値オブジェクト | 値同士の比較ができる 69 メリット 値の変更箇所の集約
Slide 70
Slide 70 text
値オブジェクト | 値同士の比較ができる 70 変更してみよう 属性比較版 比較メソッド版
Slide 71
Slide 71 text
値オブジェクト | 値同士の比較ができる 71 値に属性を追加 変更してみよう 属性比較版 比較メソッド版
Slide 72
Slide 72 text
値オブジェクト | 値同士の比較ができる 72 値に属性を追加 変更してみよう 属性比較版 比較メソッド版
Slide 73
Slide 73 text
値オブジェクト | 値同士の比較ができる 73 値に属性を追加 変更してみよう 属性比較版 比較メソッド版
Slide 74
Slide 74 text
値オブジェクト | 値同士の比較ができる 74 比較する必要ができたら追加でいい
Slide 75
Slide 75 text
値オブジェクト | 値同士の比較ができる 75 状態を不変に保つ 値同士の比較ができる 完全に交換可能である 値の性質
Slide 76
Slide 76 text
値オブジェクト | 完全に交換可能である 76 復習
Slide 77
Slide 77 text
値オブジェクト | 完全に交換可能である 77 Q. 値の変更を行う方法は? 復習
Slide 78
Slide 78 text
値オブジェクト | 完全に交換可能である 78 Q. 値の変更を行う方法は? 復習 A. 代入
Slide 79
Slide 79 text
値オブジェクト | 完全に交換可能である 79 代入って要するに 交換
Slide 80
Slide 80 text
値オブジェクト | 完全に交換可能である 80 代入って要するに 交換 値を不変にしたことで 交換以外の 変更の表現手段がなくなった
Slide 81
Slide 81 text
値オブジェクト | モチベーション 81 値オブジェクトにするモチベーションは?
Slide 82
Slide 82 text
値オブジェクト | モチベーション 82 表現力が増す 存在しない値を存在させない 誤った代入を防ぐ 値オブジェクトのモチベーション
Slide 83
Slide 83 text
値オブジェクト | 表現力が増す 83 表現力が増す 存在しない値を存在させない 誤った代入を防ぐ 値オブジェクトのモチベーション
Slide 84
Slide 84 text
値オブジェクト | 表現力が増す 84 表現力が増します
Slide 85
Slide 85 text
値オブジェクト | 存在しない値を存在させない 85 表現力が増す 存在しない値を存在させない 誤った代入を防ぐ 値オブジェクトのモチベーション
Slide 86
Slide 86 text
値オブジェクト | 存在しない値を存在させない 86 例 ユーザ名の長さは?
Slide 87
Slide 87 text
値オブジェクト | 存在しない値を存在させない 87 仮にユーザ名の長さを 50 文字以下とする
Slide 88
Slide 88 text
値オブジェクト | 存在しない値を存在させない 88
Slide 89
Slide 89 text
値オブジェクト | 存在しない値を存在させない 89 コードで表現
Slide 90
Slide 90 text
値オブジェクト | 存在しない値を存在させない 90 コードで表現 50文字を超えるユーザ名という 本来あり得ないものを存在させない
Slide 91
Slide 91 text
値オブジェクト | 誤った代入を防ぐ 91 表現力が増す 存在しない値を存在させない 誤った代入を防ぐ 値オブジェクトのモチベーション
Slide 92
Slide 92 text
値オブジェクト | 誤った代入を防ぐ 92 代入を間違えたこと ありますか?
Slide 93
Slide 93 text
値オブジェクト | 誤った代入を防ぐ 93 こんなクラス
Slide 94
Slide 94 text
値オブジェクト | 誤った代入を防ぐ 94 こんなクラス こんなメソッド と
Slide 95
Slide 95 text
値オブジェクト | 誤った代入を防ぐ 95 こんなクラス こんなメソッド と Id に name を代入してるけど 正しい?
Slide 96
Slide 96 text
値オブジェクト | 誤った代入を防ぐ 96 値オブジェクトで表現したら
Slide 97
Slide 97 text
値オブジェクト | 誤った代入を防ぐ 97 値オブジェクトで表現したら
Slide 98
Slide 98 text
値オブジェクト | 誤った代入を防ぐ 98 値オブジェクトで表現したら
Slide 99
Slide 99 text
値オブジェクト | 誤った代入を防ぐ 99 誤った代入が 発生しづらくなる 値オブジェクトで表現したら
Slide 100
Slide 100 text
値オブジェクト | まとめ 100 プリミティブな値を無理やり利用せず システム固有の値を作り表現力を増す 実装上の安全性を増す
Slide 101
Slide 101 text
エンティティ ENTITY
Slide 102
Slide 102 text
エンティティ 102 次のお題は エンティティ
Slide 103
Slide 103 text
エンティティ 103 エンティティとは 属性ではなく 同一性によって 識別されるモデル
Slide 104
Slide 104 text
エンティティ 104 エンティティとは
Slide 105
Slide 105 text
エンティティ 105 エンティティとは (値オブジェクトの逆)
Slide 106
Slide 106 text
エンティティ 106 可変 同じ属性でも区別される 同一性を持つ エンティティの性質
Slide 107
Slide 107 text
エンティティ | 可変 107 可変 同じ属性でも区別される 同一性を持つ エンティティの性質
Slide 108
Slide 108 text
エンティティ | 可変 108
Slide 109
Slide 109 text
エンティティ | 可変 109 名前を変更できるようにしたい
Slide 110
Slide 110 text
エンティティ | 可変 110
Slide 111
Slide 111 text
エンティティ | 可変 111 属性が可変
Slide 112
Slide 112 text
エンティティ | 可変 112 可変 同じ属性でも区別される 同一性を持つ エンティティの性質
Slide 113
Slide 113 text
エンティティ | 同じ属性でも区別される 113 ユーザ A ユーザ B
Slide 114
Slide 114 text
エンティティ | 同じ属性でも区別される 114 ユーザ A ユーザ B FirstName: taro FamilyName: tanaka FirstName: taro FamilyName: tanaka
Slide 115
Slide 115 text
エンティティ | 同じ属性でも区別される 115 ユーザ A ユーザ B FirstName: taro FamilyName: tanaka FirstName: taro FamilyName: tanaka 同じユーザ?
Slide 116
Slide 116 text
エンティティ | 同じ属性でも区別される 116
Slide 117
Slide 117 text
エンティティ | 同じ属性でも区別される 117 true or false?
Slide 118
Slide 118 text
エンティティ | 同じ属性でも区別される 118 属性が同じでも同姓同名かもしれない
Slide 119
Slide 119 text
エンティティ | 同じ属性でも区別される 119 ユーザを識別する必要がある 属性が同じでも同姓同名かもしれない
Slide 120
Slide 120 text
エンティティ | 同じ属性でも区別される 120 識別子が必要 属性が同じでも同姓同名かもしれない ユーザを識別する必要がある
Slide 121
Slide 121 text
エンティティ | 同じ属性でも区別される 121 ID を示す 値オブジェクトを作って
Slide 122
Slide 122 text
エンティティ | 同じ属性でも区別される 122
Slide 123
Slide 123 text
エンティティ | 同じ属性でも区別される 123 ユーザ A ユーザ B FirstName: taro FamilyName: tanaka Id: A FirstName: taro FamilyName: tanaka Id: B
Slide 124
Slide 124 text
エンティティ | 同じ属性でも区別される 124 ユーザ A ユーザ B FirstName: taro FamilyName: tanaka Id: A FirstName: taro FamilyName: tanaka Id: B IDで識別できるようになった
Slide 125
Slide 125 text
エンティティ | 可変 125 可変 同じ属性でも区別される 同一性を持つ エンティティの性質
Slide 126
Slide 126 text
エンティティ | 同一性を持つ 126 FirstName: taro FamilyName: tanaka
Slide 127
Slide 127 text
エンティティ | 同一性を持つ 127 FirstName: taro FamilyName: tanaka FirstName: taro FamilyName: sato
Slide 128
Slide 128 text
別人? エンティティ | 同一性を持つ 128 FirstName: taro FamilyName: tanaka FirstName: taro FamilyName: sato
Slide 129
Slide 129 text
別人? エンティティ | 同一性を持つ 129 FirstName: taro FamilyName: tanaka FirstName: taro FamilyName: sato 同一人物
Slide 130
Slide 130 text
別人? エンティティ | 同一性を持つ 130 FirstName: taro FamilyName: tanaka Id: A FirstName: taro FamilyName: sato Id: A 同一人物
Slide 131
Slide 131 text
エンティティ | 同一性を持つ 131 ID で比較をする ※これはツールによる実装
Slide 132
Slide 132 text
エンティティ | 同一性を持つ 132 結果
Slide 133
Slide 133 text
エンティティ | まとめ 133 属性ではなく 同一性によって 識別されるモデル ライフサイクルを持っている
Slide 134
Slide 134 text
サービス(ドメインサービス) SERVICE (DOMAIN SERVICE)
Slide 135
Slide 135 text
ドメインサービス 135 全ての混乱の原因
Slide 136
Slide 136 text
ドメインサービス 136 サービスという言葉 全ての混乱の原因
Slide 137
Slide 137 text
ドメインサービス 137 Web サービス サービス指向アーキテクチャ アプリケーションサービス ドメインサービス マイクロサービス Saas Paas Iaas
Slide 138
Slide 138 text
ドメインサービス 138 サービスという言葉の付く単語は 世の中にごまんとある
Slide 139
Slide 139 text
ドメインサービス 139 ドメインサービスは
Slide 140
Slide 140 text
ドメインサービス 140 ドメインサービスは エンティティや値オブジェクトに 実装するのが自然でない処理を 実装するオブジェクト
Slide 141
Slide 141 text
ドメインサービス 141 例えばユーザ登録で 「ユーザ名の重複を許さない」 というケース
Slide 142
Slide 142 text
ドメインサービス 142 エンティティに定義してみよう
Slide 143
Slide 143 text
ドメインサービス 143 エンティティに定義してみよう
Slide 144
Slide 144 text
ドメインサービス 144 エンティティに定義してみよう 使ってみる
Slide 145
Slide 145 text
ドメインサービス 145 使ってみる 自分に問い合わせ?? エンティティに定義してみよう
Slide 146
Slide 146 text
ドメインサービス 146 チェック専用オブジェクトを作る
Slide 147
Slide 147 text
ドメインサービス 147 チェック専用オブジェクトを作る
Slide 148
Slide 148 text
ドメインサービス 148 チェック専用オブジェクトを作る ‘forcheck’ さんって誰?
Slide 149
Slide 149 text
ドメインサービス 149 つまりこれは エンティティに 実装するのが自然でない処理
Slide 150
Slide 150 text
ドメインサービス 150 つまりこれは エンティティに 実装するのが自然でない処理 ドメインサービス
Slide 151
Slide 151 text
ドメインサービス 151 ドメインサービス 実装は後程
Slide 152
Slide 152 text
ビジネスロジックを組み立てよう 152 最小限のモデリング要素は学んだので ロジックを組み立ててみよう
Slide 153
Slide 153 text
ビジネスロジックを組み立てよう 153 最小限のモデリング要素は学んだので ロジックを組み立ててみよう お題はユーザ登録
Slide 154
Slide 154 text
ビジネスロジックを組み立てよう 154
Slide 155
Slide 155 text
ビジネスロジックを組み立てよう 155 MySQL を使うとしたら
Slide 156
Slide 156 text
ビジネスロジックを組み立てよう 156 こんな感じ?
Slide 157
Slide 157 text
ビジネスロジックを組み立てよう 157 きっとドメインサービスも
Slide 158
Slide 158 text
ビジネスロジックを組み立てよう 158 こうなる きっとドメインサービスも
Slide 159
Slide 159 text
ビジネスロジックを組み立てよう 159 データベースは大事
Slide 160
Slide 160 text
ビジネスロジックを組み立てよう 160 だけど
Slide 161
Slide 161 text
ビジネスロジックを組み立てよう 161 ユーザ登録処理という ロジックの大半を 占めるべき内容か
Slide 162
Slide 162 text
リポジトリ REPOSITORY
Slide 163
Slide 163 text
リポジトリ 163 リポジトリは
Slide 164
Slide 164 text
リポジトリ 164 リポジトリは データの永続化を担う オブジェクト
Slide 165
Slide 165 text
リポジトリ 165 リポジトリは データの永続化を担う オブジェクト 永続化の対象 =
Slide 166
Slide 166 text
リポジトリ 166 リポジトリは データの永続化を担う オブジェクト 永続化の対象 = エンティティ
Slide 167
Slide 167 text
リポジトリ 167 リポジトリを作ってみよう
Slide 168
Slide 168 text
リポジトリ 168
Slide 169
Slide 169 text
リポジトリ 169 永続化装置からの再構築(検索)
Slide 170
Slide 170 text
リポジトリ 170 永続化装置からの再構築(検索) 永続化
Slide 171
Slide 171 text
リポジトリ 171
Slide 172
Slide 172 text
リポジトリ 172 すっきり
Slide 173
Slide 173 text
リポジトリ 173 きっとドメインサービスも
Slide 174
Slide 174 text
リポジトリ 174 きっとドメインサービスも こうなる
Slide 175
Slide 175 text
リポジトリ 175 結果として こうなる
Slide 176
Slide 176 text
リポジトリ | テスト 176 ところでテストって好きですか?
Slide 177
Slide 177 text
リポジトリ | テスト 177 どうやってテストする?
Slide 178
Slide 178 text
リポジトリ | テスト 178 どうやってテストする?
Slide 179
Slide 179 text
リポジトリ | テスト 179 どうやってテストする? データベースに接続
Slide 180
Slide 180 text
リポジトリ | テスト 180 どうやってテストする? データベースにデータを用意する・・・ データベースに接続
Slide 181
Slide 181 text
リポジトリ | テスト 181 ここからがリポジトリの 本領発揮です
Slide 182
Slide 182 text
リポジトリ | テスト 182 まずはリポジトリの インターフェースを用意 ※インターフェースがない言語は完全抽象クラスで
Slide 183
Slide 183 text
リポジトリ | テスト 183 本番用リポジトリはインターフェースを実装
Slide 184
Slide 184 text
リポジトリ | テスト 184 テストのためのリポジトリを用意
Slide 185
Slide 185 text
リポジトリ | テスト 185 さっきのロジックは
Slide 186
Slide 186 text
リポジトリ | テスト 186 こうなる
Slide 187
Slide 187 text
リポジトリ | テスト 187
Slide 188
Slide 188 text
リポジトリ | テスト 188
Slide 189
Slide 189 text
リポジトリ | テスト 189 InMemoryUserRepository or UserRepository
Slide 190
Slide 190 text
リポジトリ | テスト 190 InMemoryUserRepository or UserRepository
Slide 191
Slide 191 text
リポジトリ | テスト 191 InMemoryUserRepository or UserRepository
Slide 192
Slide 192 text
リポジトリ | テスト 192 このロジックは依存がなくなった
Slide 193
Slide 193 text
リポジトリ | テスト 193 このロジックは依存がなくなった 依存 =
Slide 194
Slide 194 text
リポジトリ | テスト 194 このロジックは依存がなくなった UserRepository への依存 特定のインフラへの依存 依存 =
Slide 195
Slide 195 text
リポジトリ | 純粋なロジックとして 195 InMemoryUserRepository に 再現したいデータを用意しておけば テストができる
Slide 196
Slide 196 text
リポジトリ | 純粋なロジックとして 196 InMemoryUserRepository に 再現したいデータを用意しておけば テストができる 特定の具象オブジェクトに依存しないので 本番と同じロジックを使ってテストができる
Slide 197
Slide 197 text
アプリケーションサービス 197 次のテーマは アプリケーションサービス
Slide 198
Slide 198 text
アプリケーションサービス 198 アプリケーションサービスは ビジネスロジックの API
Slide 199
Slide 199 text
アプリケーションサービス 199 アプリケーションサービスは ビジネスロジックの API 何ができるかを表現
Slide 200
Slide 200 text
アプリケーションサービス 200 ユースケースを表現
Slide 201
Slide 201 text
アプリケーションサービス 201
Slide 202
Slide 202 text
アプリケーションサービス 202 どこかで見たことが ありませんか
Slide 203
Slide 203 text
アプリケーションサービス 203 これまで出てきた Program クラスは 実はアプリケーションサービス
Slide 204
Slide 204 text
アプリケーションサービス 204 アプリケーションサービスは
Slide 205
Slide 205 text
アプリケーションサービス 205 エンティティ 値オブジェクト ドメインサービス リポジトリ アプリケーションサービスは
Slide 206
Slide 206 text
アプリケーションサービス 206 エンティティ 値オブジェクト ドメインサービス リポジトリ これらを協調させて ユースケースを達成する アプリケーションサービスは
Slide 207
Slide 207 text
アプリケーションサービス 207 ユースケースが達成できる
Slide 208
Slide 208 text
アプリケーションサービス 208 ユースケースが達成できる アプリが作れる
Slide 209
Slide 209 text
アプリケーションサービス | MVC 209 MVC フレームワークに組み込もう
Slide 210
Slide 210 text
アプリケーションサービス | MVC 210
Slide 211
Slide 211 text
アプリケーションサービス | MVC 211 Dependency Injection
Slide 212
Slide 212 text
アプリケーションサービス | DI 212 Dependency Injection
Slide 213
Slide 213 text
アプリケーションサービス | DI 213 Dependency Injection 依存しているオブジェクトを コンストラクタ等から引き渡す(注入)する
Slide 214
Slide 214 text
アプリケーションサービス | DI 214 Dependency Injection 依存しているオブジェクトを コンストラクタ等から引き渡す(注入)する
Slide 215
Slide 215 text
アプリケーションサービス | DI 215 MVC フレームワークでは Controller のコンストラクタは フレームワークが呼び出しを行うので IoC Container (DI Container) を利用して 依存を設定する
Slide 216
Slide 216 text
アプリケーションサービス | DI 216 こんな感じ
Slide 217
Slide 217 text
アプリケーションサービス | セパレートインターフェース 217 ところでこんな風に interface を 用意する場合もあります
Slide 218
Slide 218 text
アプリケーションサービス | セパレートインターフェース 218 ところでこんな風に interface を 用意する場合もあります セパレートインターフェース と言われます
Slide 219
Slide 219 text
アプリケーションサービス | セパレートインターフェース 219 ところでこんな風に interface を 用意する場合もあります
Slide 220
Slide 220 text
アプリケーションサービス | セパレートインターフェース 220 ところでこんな風に interface を 用意する場合もあります
Slide 221
Slide 221 text
アプリケーションサービス | セパレートインターフェース 221 なんのために?
Slide 222
Slide 222 text
アプリケーションサービス | セパレートインターフェース 222 例えば例外が発生したときの動作を チェックしたい
Slide 223
Slide 223 text
アプリケーションサービス | セパレートインターフェース 223 例えば例外が発生したときの動作を チェックしたい インメモリのリポジトリでも 例外を起こすような 整合性のあるデータを 用意するのは大変・・・
Slide 224
Slide 224 text
アプリケーションサービス | セパレートインターフェース 224 セパレートインターフェースにしておけば
Slide 225
Slide 225 text
アプリケーションサービス | セパレートインターフェース 225 データを準備しなくても 例外を投げるオブジェクトに差し替えれる セパレートインターフェースにしておけば
Slide 226
Slide 226 text
後半へ続く To be continued on the latter half