SlideShare une entreprise Scribd logo
1  sur  135
Télécharger pour lire hors ligne
実践的な設計って
なんだろう?
ギルドワークス株式会社
増田 亨
DevLove Nagoya 2014/5/19
Agile is dead.
TDD is dead.
Long live the DDD.
正しいものを正しくつくる!!
プロセスやツールよりも
正しいものを正しくつくる!!
たいせつなのは設計なんですよ
プロセスやツールよりも
正しいものを正しくつくる!!
たいせつなのは設計なんですよ
設計
プロセスやツールよりも
正しいものを正しくつくる!!
設計ってなんだろう?
コードを整理整頓する工夫
設計ってなんだろう?
なんのために?
なんのために?
変更コストを下げたい
設計とは
変更コストを下げるために
コードを整理整頓する
実践的な工夫
「実践的」ってなんだろう?
「実践的」ってなんだろう?
全体 部分
「実践的」ってなんだろう?
全体 部分
長期 短期
「実践的」ってなんだろう?
全体 部分
広さ 深さ
長期 短期
「実践的」ってなんだろう?
全体 部分
論理 感覚
広さ 深さ
長期 短期
「実践的」ってなんだろう?
全体 部分
論理 感覚
理想 現実
広さ 深さ
長期 短期
「実践的」ってなんだろう?
全体 部分
論理 感覚
理想 現実
広さ 深さ
長期 短期
行ったり来たり動きながらバランスを取る
実践的な設計
全体 部分
論理 感覚
理想 現実
広さ 深さ
長期 短期
左右のバランスを取りながら
変更コストを下げる工夫を続ける
具体的にどうやるの?
具体的にどうやるの?
変更コストの原因を知る
変更コストの最大の敵
変更コストの最大の敵
重複したコード
変更コストの最大の敵
重複したコード
あちこち調べ
変更コストの最大の敵
重複したコード
あちこち調べ
あちこち直し
変更コストの最大の敵
重複したコード
あちこち調べ
あちこち直し
思わぬ副作用と格闘する
重複したコードのいやな臭い
重複したコードのいやな臭い
長いメソッド
重複したコードのいやな臭い
長いメソッド
大きなクラス
重複したコードのいやな臭い
長いメソッド
大きなクラス
たくさんの引数
重複したコードのいやな臭い
長いメソッド
大きなクラス
たくさんの引数
同じコードがあちこちに
書かれている臭いがする
マスダ流 重複の臭い判定基準
マスダ流 重複の臭い判定基準
クラス 50行
メソッド 3行
引数 0
マスダ流 重複の臭い判定基準
クラス 50行
メソッド 3行
引数 0
これを超えたら警戒警報
マスダ流 重複の臭い判定基準
クラス 50行 100行
メソッド 3行 5行
引数 0 1
マスダ流 重複の臭い判定基準
クラス 50行 100行
メソッド 3行 5行
引数 0 1
これを超えたら
一息いれて設計やり直し
コード整理の基本パターン
コード整理の基本パターン
Value Object
コード整理の基本パターン
Value Object
振る舞いを持った区分
コード整理の基本パターン
Value Object
振る舞いを持った区分
ファーストクラスコレクション
Value Object パターン
Value Object パターン
privateなデータ + public な振る舞い
Value Object パターン
privateなデータ + public な振る舞い
不変(immutable)
Value Object パターン
privateなデータ + public な振る舞い
不変(immutable)
例:String型
Value Object パターン
privateなデータ + public な振る舞い
不変(immutable)
private final char value[];
private final int count;
String substring() { … }
String trim() { … }
int length() { … }
boolean startsWith { … }
例:String型
Value Object パターン
getValue()しない
Value Object パターン
データをget()して
加工/計算/判断すると、
ロジックが散らばる
Value Object パターン
データをget()して
加工/計算/判断すると、
ロジックが散らばる
だから
Value Object パターン
データをget()して
加工/計算/判断すると、
ロジックが散らばる
だから
データのある場所に
ロジックを寄せる
Value Object パターン
setValue()しない
Value Object パターン
データを
加工/計算/判断して
set()すると
状態管理のコードが散らばる
Value Object パターン
データを
加工/計算/判断して
set()すると
状態管理のコードが散らばる
だから
Value Object パターン
データを
加工/計算/判断して
set()すると
状態管理のコードが散らばる
だから
不変オブジェクトにする
業務アプリの Value Object
業務アプリの Value Object
String
StringBuilder
List<String>
業務アプリの Value Object
String
StringBuilder
List<String>+業務ロジック
業務アプリの Value Object
String
StringBuilder
List<String>
商品名称(ProductName)
備考(Remarks)
摘要(Abstract) +業務ロジック
業務アプリの Value Object
String
StringBuilder
List<String>
BigDecimal
Integer
商品名称(ProductName)
備考(Remarks)
摘要(Abstract) +業務ロジック
業務アプリの Value Object
String
StringBuilder
List<String>
BigDecimal
Integer
商品名称(ProductName)
備考(Remarks)
摘要(Abstract) +業務ロジック
+業務ロジック
業務アプリの Value Object
String
StringBuilder
List<String>
BigDecimal
Integer
金額(Money)
数量(Quantity)
単位(Unit)
商品名称(ProductName)
備考(Remarks)
摘要(Abstract) +業務ロジック
+業務ロジック
業務アプリの Value Object
String
StringBuilder
List<String>
BigDecimal
Integer
Calendar
Date/Long
金額(Money)
数量(Quantity)
単位(Unit)
商品名称(ProductName)
備考(Remarks)
摘要(Abstract) +業務ロジック
+業務ロジック
業務アプリの Value Object
String
StringBuilder
List<String>
BigDecimal
Integer
Caleldar
Date/Long
金額(Money)
数量(Quantity)
単位(Unit)
商品名称(ProductName)
備考(Remarks)
摘要(Abstract) +業務ロジック
+業務ロジック
+業務ロジック
業務アプリの Value Object
String
StringBuilder
List<String>
BigDecimal
Integer
Caleldar
Date/Long
起算日(InitialDate)
期限(DueDate)
有効期間(ValidTerm)
金額(Money)
数量(Quantity)
単位(Unit)
商品名称(ProductName)
備考(Remarks)
摘要(Abstract) +業務ロジック
+業務ロジック
+業務ロジック
業務アプリの Value Object
String
StringBuilder
List<String>
BigDecimal
Integer
Caleldar
Date/Long
起算日(InitialDate)
期限(DueDate)
有効期間(ValidTerm)
金額(Money)
数量(Quantity)
単位(Unit)
商品名称(ProductName)
備考(Remarks)
摘要(Abstract) +業務ロジック
+業務ロジック
+業務ロジック
振る舞いを持った区分
振る舞いを持った区分
enum MemberType
{
normal, silver, gold
}
振る舞いを持った区分
MemberType type = gold;
gold.chargeRate()
gold.description()
gold.isLimitOver()
振る舞いを持った区分
区分定数に
業務の知識を持たせる
MemberType type = gold;
gold.chargeRate()
gold.description()
gold.isLimitOver()
振る舞いを持った区分
CodeIQ で出題中
(6月2日まで)
「顧客区分」を列挙型で宣言し、
「顧客区分」ごとに異なる振る舞い
を持たせてみましょう。
ファーストクラスコレクション
ファーストクラスコレクション
privateなコレククション
+ public な振る舞い
private final char value[];
private final int count;
String substring() { … }
String trim() { … }
int length() { … }
boolean startsWith { … }
例:String型
ファーストクラスコレクション
コレクションをget()して
操作すると
あちこちに同じコードが登場する
ファーストクラスコレクション
コレクションをget()して
操作すると
あちこちに同じコードが登場する
だから
ファーストクラスコレクション
コレクションをget()して
操作すると
あちこちに同じコードが登場する
だから
コレクションを持つクラスに
ループ処理を閉じ込めて
ファーストクラスコレクション
コレクションをget()して
操作すると
あちこちに同じコードが登場する
だから
コレクションを持つクラスに
ループ処理を閉じ込めて
一元管理する
ファーストクラスコレクション
ファーストクラスコレクション
顧客一覧 (Customers)
ファーストクラスコレクション
顧客一覧
注文明細
(Customers)
(OrderLines)
ファーストクラスコレクション
顧客一覧
注文明細
利用履歴
(Customers)
(OrderLines)
(UsageHistory)
ファーストクラスコレクション
顧客一覧
注文明細
利用履歴
To-do リスト
(Customers)
(OrderLines)
(UsageHistory)
(ToDoList)
ファーストクラスコレクション
顧客一覧
注文明細
利用履歴
To-do リスト
未読一覧
(Customers)
(OrderLines)
(UsageHistory)
(ToDoList)
(UnReads)
ファーストクラスコレクション
顧客一覧
注文明細
利用履歴
To-do リスト
未読一覧
選択候補
(Customers)
(OrderLines)
(UsageHistory)
(ToDoList)
(UnReads)
(Candidates)
コードの整理 アンチパターン
コードの整理 アンチパターン
Smart UI
コードの整理 アンチパターン
Smart UI
トランザクションスクリプト
コードの整理 アンチパターン
Smart UI
トランザクションスクリプト
Active Record
コードの整理 アンチパターン
Smart UI
トランザクションスクリプト
Active Record
必ずコードが重複する
コードの整理 アンチパターン
画面仕様書
コードの整理 アンチパターン
画面仕様書
画面単位で開発
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
画面Aと画面Bで
コード重複
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
画面Aと画面Bで
コード重複
機能仕様書
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
画面Aと画面Bで
コード重複
機能仕様書
機能単位で開発
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
画面Aと画面Bで
コード重複
機能仕様書
機能単位で開発
トランザクション
スクリプト
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
画面Aと画面Bで
コード重複
機能Aと機能Bで
コード重複機能仕様書
機能単位で開発
トランザクション
スクリプト
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
画面Aと画面Bで
コード重複
機能Aと機能Bで
コード重複機能仕様書
機能単位で開発
テーブル
定義書
トランザクション
スクリプト
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
画面Aと画面Bで
コード重複
機能Aと機能Bで
コード重複機能仕様書
機能単位で開発
テーブル単位で開発
テーブル
定義書
トランザクション
スクリプト
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
画面Aと画面Bで
コード重複
機能Aと機能Bで
コード重複機能仕様書
機能単位で開発
テーブル単位で開発
テーブル
定義書
トランザクション
スクリプト
Active
Record
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
画面Aと画面Bで
コード重複
機能Aと機能Bで
コード重複
テーブルに関連
づかないコードの
氾濫と重複
機能仕様書
機能単位で開発
テーブル単位で開発
テーブル
定義書
トランザクション
スクリプト
Active
Record
コードの整理 アンチパターン
画面仕様書
画面単位で開発
Smart UI
プログラム
画面Aと画面Bで
コード重複
機能Aと機能Bで
コード重複
テーブルに関連
づかないコードの
氾濫と重複
機能仕様書
機能単位で開発
テーブル単位で開発
テーブル
定義書
トランザクション
スクリプト
Active
Record
コードの整理 グッドパターン
コードの整理 グッドパターン
三層+ドメインモデル
コードの整理 グッドパターン
プレゼンテーション層
ビュー
画面コントローラ
三層+ドメインモデル
ドメインモデル
コードの整理 グッドパターン
プレゼンテーション層
ビュー
画面コントローラ
三層+ドメインモデル
ドメインモデル
業務ロジック
コードの整理 グッドパターン
ビジネスロジック層
(サービス層)
アプリケーション
コントローラ
三層+ドメインモデル
業務ロジック
ドメインモデル
プレゼンテーション層
ビュー
画面コントローラ
コードの整理 グッドパターン
三層+ドメインモデル
ドメインモデル
業務ロジック
業務ロジック
プレゼンテーション層
ビュー
画面コントローラ
ビジネスロジック層
(サービス層)
アプリケーション
コントローラ
コードの整理 グッドパターン
データアクセス層
データアクセス
オブジェクト
三層+ドメインモデル
業務ロジック
業務ロジック
ドメインモデル
ビジネスロジック層
(サービス層)
アプリケーション
コントローラ
プレゼンテーション層
ビュー
画面コントローラ
コードの整理 グッドパターン
データアクセス層
データアクセス
オブジェクト
三層+ドメインモデル
ドメインモデル
業務ロジック
業務ロジック
業務ロジック
プレゼンテーション層
ビュー
画面コントローラ
ビジネスロジック層
(サービス層)
アプリケーション
コントローラ
コードの整理 グッドパターン
データアクセス層
データアクセス
オブジェクト
三層+ドメインモデル
ドメインモデル
業務ロジック
業務ロジック
業務ロジック
プレゼンテーション層
ビュー
画面コントローラ
ビジネスロジック層
(サービス層)
アプリケーション
コントローラ
三層に散らばりがちな
業務ロジックの断片を
ここに集めて一元化する
ドメインモデルの設計のコツ
ドメインモデルの設計のコツ
画面単位に設計しない
ドメインモデルの設計のコツ
画面単位に設計しない
機能単位に設計しない
ドメインモデルの設計のコツ
画面単位で設計しない
機能単位に設計しない
テーブル単位に設計しない
じゃあどうすればよい?
じゃあどうすればよい?
業務の関心事を表現できるように
クラスを考える
業務の関心事(業務知識)
業務の関心事(業務知識)
1. ポイントカード口座会員
2. 購入金額に応じてポイントを提供
3. 本人確認をすることがある
4. 精算後のポイント加算はできない
5. ポイントの有効期限は2年
6. ポイントは換金しない
7. 返品・交換により累計ポイントが
マイナスになる場合は現金で精算
ドメインモデル(関心事の模型)
会員
(entity)
ポイント口座
(account)
購入
(event)
返品・交換
(event)
有効期限
(policy)
購買履歴
(status)
換金率
(policy)
残高
(status)
本人確認情報
(description)
加算する
参照する
ドメインモデル(関心事の模型)
会員
(entity)
ポイント口座
(account)
購入
(event)
返品・交換
(event)
有効期限
(policy)
購買履歴
(status)
換金率
(policy)
残高
(status)
本人確認情報
(description)
加算する
参照する
画面/機能/テーブル単位のコード整理とは
異なる切り口のクラス設計
なぜドメインモデルなの?
なぜドメインモデルなの?
コードが重複しない
なぜドメインモデルなの?
コードが重複しない
変更が簡単
なぜコードが重複しないか?
なぜコードが重複しないか?
関心事単位の整理だから
なぜコードが重複しないか?
関心事単位の整理だから
画面/機能/テーブル単位の
コード整理は重複する
なぜ変更が簡単か?
なぜ変更が簡単か?
仕様変更は業務から発生する
なぜ変更が簡単か?
仕様変更は業務から発生する
業務の関心事単位のクラスなら
変更箇所を1対1で特定できる
なぜ変更が簡単か?
仕様変更は業務から発生する
業務の関心事単位のクラスなら
変更箇所を1対1で特定できる
業務の関心事の依存関係が
クラスの依存関係になっている
なぜ変更が簡単か?
仕様変更は業務から発生する
業務の関心事単位のクラスなら
変更箇所を1対1で特定できる
業務の関心事の依存関係が
クラスの依存関係になっている
影響範囲がわかりやすい
なぜ変更が簡単か?
仕様変更は業務から発生する
業務の関心事単位のクラスなら
変更箇所を1対1で特定できる
業務の関心事の依存関係が
クラスの依存関係になっている
影響範囲がわかりやすい
変更の対象箇所以外でわけの
わからない副作用がおきない
ドメインモデル(関心事の模型)
会員
(entity)
ポイント口座
(account)
購入
(event)
返品・交換
(event)
有効期限
(policy)
購買履歴
(status)
換金率
(policy)
残高
(status)
本人確認情報
(description)
加算する
参照する
画面/機能/テーブル単位のコード整理とは
異なる切り口のクラス設計
コードの整理 グッドパターン
データアクセス層
データアクセス
オブジェクト
三層+ドメインモデル
ドメインモデル
業務ロジック
業務ロジック
業務ロジック
プレゼンテーション層
ビュー
画面コントローラ
ビジネスロジック層
(サービス層)
アプリケーション
コントローラ
三層に散らばりがちな
業務ロジックの断片を
ここに集めて一元化する
たいせつなのは設計なんですよ
設計
プロセスやツールよりも
正しいものを正しくつくる!!
設計とは
変更コストを下げるために
コードを整理整頓する
実践的な工夫

Contenu connexe

Tendances

ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善増田 亨
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer増田 亨
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめpospome
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring増田 亨
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える増田 亨
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす増田 亨
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン増田 亨
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる増田 亨
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」鈴木 セシル
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント増田 亨
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう増田 亨
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8Koichiro Matsuoka
 

Tendances (20)

ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 

En vedette

技術者の働き方/ リモートワークという働き方 powered byドメイン駆動設計
技術者の働き方/ リモートワークという働き方 powered byドメイン駆動設計技術者の働き方/ リモートワークという働き方 powered byドメイン駆動設計
技術者の働き方/ リモートワークという働き方 powered byドメイン駆動設計GuildWorks
 
現場コーチから見えてきた越境する現場の3つの特徴
現場コーチから見えてきた越境する現場の3つの特徴現場コーチから見えてきた越境する現場の3つの特徴
現場コーチから見えてきた越境する現場の3つの特徴GuildWorks
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計増田 亨
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則増田 亨
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南Mikiya Okuno
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる増田 亨
 
当たり前を当たり前に:Agile2017レポート
当たり前を当たり前に:Agile2017レポート当たり前を当たり前に:Agile2017レポート
当たり前を当たり前に:Agile2017レポートLINE Corporation
 

En vedette (9)

技術者の働き方/ リモートワークという働き方 powered byドメイン駆動設計
技術者の働き方/ リモートワークという働き方 powered byドメイン駆動設計技術者の働き方/ リモートワークという働き方 powered byドメイン駆動設計
技術者の働き方/ リモートワークという働き方 powered byドメイン駆動設計
 
現場コーチから見えてきた越境する現場の3つの特徴
現場コーチから見えてきた越境する現場の3つの特徴現場コーチから見えてきた越境する現場の3つの特徴
現場コーチから見えてきた越境する現場の3つの特徴
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
 
当たり前を当たり前に:Agile2017レポート
当たり前を当たり前に:Agile2017レポート当たり前を当たり前に:Agile2017レポート
当たり前を当たり前に:Agile2017レポート
 

Similaire à 実践的な設計って、なんだろう?

Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!Yasui Tsutomu
 
Workshop Facilitation
Workshop FacilitationWorkshop Facilitation
Workshop FacilitationNaoka MISAWA
 
Hokkaido.pm #11
Hokkaido.pm #11Hokkaido.pm #11
Hokkaido.pm #11moznion
 
13_B_5 Who is a architect?
13_B_5 Who is a architect?13_B_5 Who is a architect?
13_B_5 Who is a architect?Atsushi Fukui
 
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話Clarity 2019 で デザインシステムの課題は人なんだと痛感した話
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話Yusuke Goto
 
アジャイル実践における開発環境の変化〜要求の捉え方、プロジェクト運営、ツール支援
アジャイル実践における開発環境の変化〜要求の捉え方、プロジェクト運営、ツール支援アジャイル実践における開発環境の変化〜要求の捉え方、プロジェクト運営、ツール支援
アジャイル実践における開発環境の変化〜要求の捉え方、プロジェクト運営、ツール支援智治 長沢
 
Information20120312
Information20120312Information20120312
Information20120312b-slash
 
開発プロセスの話
開発プロセスの話開発プロセスの話
開発プロセスの話Makiko Nakasato
 
アジャイル開発はWhyから始まる
アジャイル開発はWhyから始まるアジャイル開発はWhyから始まる
アジャイル開発はWhyから始まるtoshihiro ichitani
 
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)Operation Lab, LLC.
 
It業界の優良企業の見つけ方 20140502 黒田
It業界の優良企業の見つけ方 20140502 黒田It業界の優良企業の見つけ方 20140502 黒田
It業界の優良企業の見つけ方 20140502 黒田Yusuke Kuroda
 
デザイン仕様書(ガイド)の書き方 (初歩者用)
デザイン仕様書(ガイド)の書き方 (初歩者用)デザイン仕様書(ガイド)の書き方 (初歩者用)
デザイン仕様書(ガイド)の書き方 (初歩者用)witstudio
 
Sustainable Software Development
Sustainable Software DevelopmentSustainable Software Development
Sustainable Software DevelopmentKenji Hiranabe
 
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用masashi takehara
 
企画-計画-開発-ビルド-デプロイ 価値のパイプラインできてますか?【字幕つき】 #kansumiA2 #devsumi
企画-計画-開発-ビルド-デプロイ 価値のパイプラインできてますか?【字幕つき】 #kansumiA2 #devsumi 企画-計画-開発-ビルド-デプロイ 価値のパイプラインできてますか?【字幕つき】 #kansumiA2 #devsumi
企画-計画-開発-ビルド-デプロイ 価値のパイプラインできてますか?【字幕つき】 #kansumiA2 #devsumi 智治 長沢
 
今、おさえておきたい DevOps
今、おさえておきたい DevOps 今、おさえておきたい DevOps
今、おさえておきたい DevOps 智治 長沢
 
0から始めるUXデザイン(UXデザインの組織を作る)
0から始めるUXデザイン(UXデザインの組織を作る)0から始めるUXデザイン(UXデザインの組織を作る)
0から始めるUXデザイン(UXデザインの組織を作る)Jiji Kim
 
Design Thinking - מארגון ממוקד טכנולוגיה לארגון ממוקד משתמש
Design Thinking - מארגון ממוקד טכנולוגיה לארגון ממוקד משתמשDesign Thinking - מארגון ממוקד טכנולוגיה לארגון ממוקד משתמש
Design Thinking - מארגון ממוקד טכנולוגיה לארגון ממוקד משתמשHen Shkedi
 

Similaire à 実践的な設計って、なんだろう? (20)

Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!
 
Workshop Facilitation
Workshop FacilitationWorkshop Facilitation
Workshop Facilitation
 
Hokkaido.pm #11
Hokkaido.pm #11Hokkaido.pm #11
Hokkaido.pm #11
 
13_B_5 Who is a architect?
13_B_5 Who is a architect?13_B_5 Who is a architect?
13_B_5 Who is a architect?
 
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話Clarity 2019 で デザインシステムの課題は人なんだと痛感した話
Clarity 2019 で デザインシステムの課題は人なんだと痛感した話
 
アジャイル実践における開発環境の変化〜要求の捉え方、プロジェクト運営、ツール支援
アジャイル実践における開発環境の変化〜要求の捉え方、プロジェクト運営、ツール支援アジャイル実践における開発環境の変化〜要求の捉え方、プロジェクト運営、ツール支援
アジャイル実践における開発環境の変化〜要求の捉え方、プロジェクト運営、ツール支援
 
Information20120312
Information20120312Information20120312
Information20120312
 
開発プロセスの話
開発プロセスの話開発プロセスの話
開発プロセスの話
 
アジャイル開発はWhyから始まる
アジャイル開発はWhyから始まるアジャイル開発はWhyから始まる
アジャイル開発はWhyから始まる
 
15 c5 dad
15 c5 dad15 c5 dad
15 c5 dad
 
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
 
It業界の優良企業の見つけ方 20140502 黒田
It業界の優良企業の見つけ方 20140502 黒田It業界の優良企業の見つけ方 20140502 黒田
It業界の優良企業の見つけ方 20140502 黒田
 
デザイン仕様書(ガイド)の書き方 (初歩者用)
デザイン仕様書(ガイド)の書き方 (初歩者用)デザイン仕様書(ガイド)の書き方 (初歩者用)
デザイン仕様書(ガイド)の書き方 (初歩者用)
 
Sustainable Software Development
Sustainable Software DevelopmentSustainable Software Development
Sustainable Software Development
 
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
 
企画-計画-開発-ビルド-デプロイ 価値のパイプラインできてますか?【字幕つき】 #kansumiA2 #devsumi
企画-計画-開発-ビルド-デプロイ 価値のパイプラインできてますか?【字幕つき】 #kansumiA2 #devsumi 企画-計画-開発-ビルド-デプロイ 価値のパイプラインできてますか?【字幕つき】 #kansumiA2 #devsumi
企画-計画-開発-ビルド-デプロイ 価値のパイプラインできてますか?【字幕つき】 #kansumiA2 #devsumi
 
今、おさえておきたい DevOps
今、おさえておきたい DevOps 今、おさえておきたい DevOps
今、おさえておきたい DevOps
 
0から始めるUXデザイン(UXデザインの組織を作る)
0から始めるUXデザイン(UXデザインの組織を作る)0から始めるUXデザイン(UXデザインの組織を作る)
0から始めるUXデザイン(UXデザインの組織を作る)
 
Design Thinking - מארגון ממוקד טכנולוגיה לארגון ממוקד משתמש
Design Thinking - מארגון ממוקד טכנולוגיה לארגון ממוקד משתמשDesign Thinking - מארגון ממוקד טכנולוגיה לארגון ממוקד משתמש
Design Thinking - מארגון ממוקד טכנולוגיה לארגון ממוקד משתמש
 
Agile Overview In Ono
Agile Overview In OnoAgile Overview In Ono
Agile Overview In Ono
 

Plus de 増田 亨

事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述増田 亨
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来増田 亨
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル増田 亨
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル増田 亨
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ増田 亨
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう増田 亨
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう増田 亨
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java増田 亨
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して増田 亨
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 
SoR 2.0 summary
SoR 2.0 summarySoR 2.0 summary
SoR 2.0 summary増田 亨
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!増田 亨
 
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築増田 亨
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】増田 亨
 
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイルドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル増田 亨
 

Plus de 増田 亨 (17)

事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
SoR 2.0 summary
SoR 2.0 summarySoR 2.0 summary
SoR 2.0 summary
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!
 
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイルドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
 

実践的な設計って、なんだろう?