SlideShare una empresa de Scribd logo
1 de 83
Descargar para leer sin conexión
ドメイン駆動設計
powered by Spring
ドメインロジックに集中せよ
2017年3月28日
ギルドワークス 増田
focus on domain logic
ドメイン駆動設計
Domain-Driven Design
ソフトウェアの核心にある
複雑さに立ち向う
Tackling Complexity in the Heart of Software
複雑さという課題
The Challenge of Complexity
設計を複雑にする要因
技術的な複雑さ
ドメインの複雑さ
ネットワーク、データベースなど
基盤となる技術の複雑さ
ドメイン(対象領域)の
ユーザの活動やビジネスの複雑さ
設計を複雑にする要因
技術的な複雑さ
ドメインの複雑さ
ネットワーク、データベースなど
基盤となる技術の複雑さ
ドメイン(対象領域)の
ユーザの活動やビジネスの複雑さ
重要な課題は、ドメインの複雑さ
ユーザの活動やビジネスそのものがもつ複雑さ
ドメインロジックに集中する
モデルに基づき設計する
インクリメンタルに開発する
核心にある複雑さに立ち向う
ドメインロジックに集中する
モデルに基づき設計する
インクリメンタルに開発する
核心にある複雑さに立ち向う
ドメインロジックに集中する
ビジネスルール
ドメインロジック
分析の対象
実装の対象
遵守すべき約束事
外部:契約、商習慣、法令、…
内部:社内規定、予算、しきたり、…
ビジネスルールのサブセット
プログラミング言語で記述
ドメインロジックに集中する
ビジネスルール
ドメインロジック
分析の対象
実装の対象
遵守すべき約束事
外部と:契約、商習慣、法令、…
社内で:予算、計画、規定、しきたり、…
ビジネスルールのサブセット
プログラミング言語で記述
アプリケーションが使われる領域(現実世界)の約束事を理解する
システム化の対象となるビジネスルールを特定する
それをプログラミング言語で表現する
その活動に集中する
ドメインロジックに集中する
モデルに基づき設計する
インクリメンタルに開発する
核心にある複雑さに立ち向う
情報収集 分析・整理
ヒヤリング
Q&A
ユーザストーリ
画面の紙芝居
システム企画書
既存の帳票/ファイル
既存の画面
既存のデータベース
仕様 実装設計
画面一覧
機能一覧
項目定義
処理詳細
モデルを使わない開発プロセス
情報収集 分析・整理
ヒヤリング
Q&A
ユーザストーリ
画面の紙芝居
システム企画書
既存の帳票/ファイル
既存の画面
既存のデータベース
仕様 実装設計
画面一覧
機能一覧
項目定義
処理詳細
モデルを使わない開発プロセス
ドメインモデルを一切もたず
バックログ(機能一覧、画面一覧)をとにかく消化する開発
情報収集 分析・整理
ヒヤリング
Q&A
ユーザストーリ
画面の紙芝居
システム企画書
既存の帳票/ファイル
既存の画面
既存のデータベース
仕様 実装設計
画面一覧
機能一覧
項目定義
処理詳細
ビジネスルール
モデル
現実を単純化した模型の導入
全体の見通しが良くなる
ムリ・ムダ・ムラが減る
モデリング作業が増える
ドメインロジックに集中する
モデルに基づき設計する
インクリメンタルに開発する
核心にある複雑さに立ち向う
フェーズに分ける開発
情報収集
分析・整理
基本設計
詳細設計
運用
実装
based on out-of-date assumptions
フェーズに分ける開発
情報収集
分析・整理
基本設計
詳細設計
運用
実装
based on out-of-date assumptions
担当者が変わる → 伝言ゲーム
1方向の活動 → 誤りがあっても是正されない
(後ろにいくほどつじつま合わせが多発)
インクリメンタルな開発
情報収集
分析・整理
基本設計
詳細設計
運用
実装
step-by-step, in small pieces, based on real-life experience
day-1 day-2 day-3 …
同じメンバーが担当
すべてが発展途上
変化への機敏な対応
創発性(ブレークスルー)
ドメインロジックに集中する
モデルに基づき設計する
インクリメンタルに開発する
核心にある複雑さに立ち向う
ステキなお知らせ
核心にある
複雑さに立ち向かう
強力な援軍
Spring Framework
Spring Boot
Spring Framework
ドメインとドメインロジックに集中できる
ドメインモデリングに時間を割ける
Spring Framework
ドメインモデル以外のことを
全部用意するフレームワーク
Spring handles the infrastructure
so you can focus on your application.
Spring focuses on the “plumbing" of enterprise applications
so that teams can focus on application-level business logic.
Spring Framework
Reference Document
Spring Framework Project Introduction
Spring 入門
配管
Spring Boot
本来のアプリケーション開発をすぐ始められる
day-1 からプロダクションレベルで運用できる
インクリメンタルな開発を実践できる
残念なお知らせ
Spring Framework
Spring Boot
こんな開発にも使えます…
ドメインとドメインロジックに
技術課題に集中する
モデルに基づき設計する
バックログをせっせと消化する
インクリメンタルな設計
フェーズに分けて伝言ゲーム
基盤とアプリで別チーム
ドメインロジックに集中する
モデルに基づき設計する
インクリメンタルに開発する
核心にある複雑さに立ち向う
ドメイン駆動設計
powered by Spring
アンチパターン
ドメインロジック以外に焦点をあてる
ドメインモデルなしに機能一覧バックログを消化
プレゼンテーション層
データソース層
アプリケーション層
画面の入出力
データベースの入出力
データベースの
更新・参照の手続き
データの加工ロジック
データの検証ロジック
データの判断/加工/計算
書き込みの前処理ロジック
読み出しの後処理ロジック
データ処理に焦点をあてる
@Controller
@Service
@Repository
ドメインロジックに集中する
モデルに基づき設計する
インクリメンタルに開発する
核心にある複雑さに立ち向う
プレゼンテーション層
データソース層
アプリケーション層
ドメインを隔離する
@Controller
@Service
@Repository
ドメインモデル
ここを
インクリメンタルに
成長させながら
全体の開発を駆動する
ドメインロジックを
ここに集約する
ドメインモデル
An object model of the domain that incorporates
both behavior and data
ドメインモデル
ドメインロジックを
オブジェクトで表現する
model elements expressed as objects
ドメインモデルだと
何が良いのか?
変更が楽で安全
ドメインモデル:変更容易性
ドメインロジックが重複しない
ロジックを書いてある箇所の特定が簡単
変更の影響を狭い範囲に限定できる
データを持つクラスが唯一のロジックを持つ
パッケージ名→クラス名
変更したクラスに閉じる
せいぜい、そのクラスを使うクラスまで
トランザクションスクリプト
ドメインロジックが重複しない
同じロジックが重複する
ロジックを書いてある箇所の特定が簡単
データ処理の流れを追いかけて探し回る
変更の影響を狭い範囲に限定できる
変更箇所の後続処理をすべて追いかける
ドメインオブジェクト
設計パターン
ドメインロジック
ビジネスルール
ドメインロジック
分析の対象
実装の対象
遵守すべき約束事
外部:契約、商習慣、法令、…
内部:社内規定、予算、しきたり、…
ビジネスルールのサブセット
プログラミング言語で記述
ドメインロジックの最小単位
数値
日付
文字列
数量、金額、…
予定日、締日、…
演算の対象 演算(判断/加工/計算)のパターン
識別コード/識別名
分類コード/分類名
等値の判定
大小判定/順序付け
四則演算
換算
範囲内/範囲外の判定
型変換(文字列表現から)
型変換(文字列表現へ)
有効要素の判定
==, equals(), …
<,>, compareTo(), …
MIN,MAX, ….
contains(), has(), …
of(), parse(), …
toString(), asText(), …
+-*/, plus(), minus(), …
inThousand(), inPieces(),
値オブジェクト
コレクションオブジェクト
区分オブジェクト
ドメインロジックの置き場所
基本パターン
値オブジェクト
BigDecimal
Integer
…
LocalDate
Long
起算日 InitialDate
期限 DueDate
有効期間 ValidTerm
金額 Money
数量 Quantity
単位 Unit
言語で用意された汎用の「型」
独自に定義したドメイン固有の「型」
判断/加工/計算ロジックの置き場所
45
コレクションオブジェクト
(ファーストクラスコレクション)
• ListやSetをラップしたドメインオブジェクト
• 「一覧」「履歴」という関心事
• 一覧の検索条件、表示項目、表示順の議論は、重要な関
心事の発見につながる
• コレクション操作はコードがごちゃごちゃする
• 変更の副作用が多い
• クラスとして独立させ、そのクラスに
コレクション操作のロジックを閉じ込める
• count(), contains()
• select(), reject()
• convertTo()
区分オブジェクト
• 振る舞いを持った Enum
• 区分ごとのロジックを別クラスに記述
• Java言語仕様に組み込まれた
Strategy/Stateパターン
• if 文/switch文を書かない工夫
説明とコード例は、googleで
「場合わけの書き方あれこれ」で検索、
または技術評論社ムック本
「オブジェクト指向をきちんと使いたいあなたへ」
場合ごとのドメインロジックを表現する道具
モジュール化
構造化
自己文書化
ドメインオブジェクト:設計原則
モジュール化
構造化
自己文書化
ドメインオブジェクト
モジュール化
複雑さに立ち向かうための工夫
プログラムを
開発/保守がやりやすい単位に分割する
部品化
組み立て
ドメインロジックのモジュール化
ドメインモデル
(オブジェクトモデル)
トランザクションスクリプト
(手続きモデル)
アプローチ
関連するデータとロジックを
一体にする
データクラスと機能クラスに
分ける
モジュール
分割の単位
関心事
(数量、金額、納期、締日、…)
値オブジェクトなど
ドメインロジックの
部品化のパターンが明確
機能
(受注登録、注文変更、…)
サブルーチン化が不明確
大きなデータクラスと
長いメソッドになりがち
ロジックの
再利用
ドメインオブジェクトとして部品化
ドメインオブジェクトの
組み合わせで機能を実現
部品化が進まない
ロジックの再利用がしにくい
コードの重複
モジュール化
構造化
自己文書化
ドメインオブジェクト
ドメインロジックの構造化
複雑さに立ち向かうために
記述レベルを階層化する
コンピュータよりの記述から
人間よりの記述へ
段階的に近づける
構造化:記述レベルの階層化
業務で使う用語
期日
数量
金額
消費税
キャンセル規定
順番待ち
商品リスト
在庫一覧
ドメイン固有API
ExpireDate
Quantity
Amount
TaxAmount
OverBookingPolicy
WaitingList
Catalogue
Inventory
Java コアAPI
BigDecimal
LocalDate
List,Set,Map
Predicate
Stream/Collectors
Java 言語仕様
int , char
int[], char[]
String , Enum
if , for
機械
人
階
層
化
ドメイン固有APIのレイヤを追加する
モジュール化
構造化
自己文書化
ドメインオブジェクト
ドメインロジックの自己文書化
複雑さに立ち向かうために
コードにドメインロジックを語らせる
(自己文書化)
パッケージ名/クラス名/メソッド名
メソッドの返す型
引数の型
ドメインロジックの自己文書化
ドメインオブジェクトを参照する他の三層のコード
ドメインロジックとの関係性を語るようになる
(ドメインモデルの自己文書化が他の三層に波及する)
ソースコード以外の文書化
業務マニュアル <重要>
利用者ガイド <重要>
開発・保守ドキュメント <不要>
モジュール化
構造化
自己文書化
ドメインオブジェクト:設計原則
ドメインオブジェクトの設計レビュー
ドメインロジック記述の怪しい臭い
else句
switch文
boolean 宣言
判断ロジックの不適切な置き場所
判断ロジックの不要な複雑化
定数宣言だけの enum 区分ごとのロジックの置き場書が不適切
Stream
ドメインロジックの暗黙化(判断/加工の隠蔽)
ドメインロジックの重複
5行以上のメソッド
ドメインロジックの暗黙化
ドメインロジックの重複
3つ以上のフィールド クラスの凝集度の低下(関心事の発散)
ラムダ記法(無名関数) ドメインロジックの暗黙化
メソッドチェイン ドメインロジックの暗黙化
モジュール化/構造化/自己文書化の原則違反の臭い
ドメインを隔離する
Isolating the Domain
プレゼンテーション層
データソース層
アプリケーション層
ドメインを隔離する
@Controller
@Service
@Repository
ドメインモデル
ここを
インクリメンタルに
成長させながら
全体の開発を駆動する
ドメインロジックを
ここに集約する
ドメインを隔離する
データの入出力
画面
データベース
ドメインモデル
ドメインロジックの
オブジェクト表現
画面やデータベースの都合を、ドメインモデルに持ち込まないこと
ドメインを隔離する
画面やデータベースの都合を
ドメインモデルに持ち込まない
プレゼンテーション層と
ドメインオブジェクト
Spring MVC
Thymeleaf
Spring Security
プレゼンテーション層
@Controller
ドメインモデル
ドメインモデルに依存させる
プレゼンテーション層
ドメインオブジェクトを直接使う
プレゼンテーション層の記述を
ドメインモデルに依存させる
プレゼンテーション層に
判断/加工/計算のロジックを書かない
プレゼンテーション層
HTTP リクエスト → ドメインオブジェクト
DirectFieldAccess
ドメインオブジェクト → HTTPレスポンス
HTML テンプレート ( Thymeleaf )
@Controller
class PersonController {
@GetMapping("/")
String form(Person person) {
return "form";
}
@PostMapping("/")
String register(@Validated Person person, BindingResult result) {
if (result.hasErrors()) return "form";
return "redirect:/results";
}
@GetMapping("/results")
String results() {
return "/results";
}
}
ドメインオブジェクトを直接使う
Direct Field Access
ドメインオブジェクトはロジックを書く
<getter/setter/isXxx()を書かない>
@ControllerAdvice
public class BinderAdvice {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.initDirectFieldAccess();
PropertyEditor trimmer = new StringTrimmerEditor(false);
binder.registerCustomEditor(Object.class, trimmer);
}
}
#kanjava MVC で検索
アプリケーション層と
ドメインオブジェクト
@Service
@Validated
ドメインの関心事としてのデータフロー
プレゼンテーション層
データソース層
アプリケーション層
@Controller
@Service
@Repository
ドメインモデル
業務の関心事としての入出力
サービスクラス
@Service
@Validated
public class PersonService {
@Autowired
PersonRepository repository;
public void register(@NotNull Person person) {
repository.register(person);
}
@NotEmpty
public List<Person> listOf(@NotNull Criteria criteria) {
return repository.listOf(criteria);
}
}
@Validated
契約による設計
assertより表現力が豊か
ドメインの関心事としてのデータ入出力
ドメインの関心事としての入出力
interface PersonRepository {
void register(Person person);
List<Person> listOf(Criteria criteria);
}
ドメインの関心事:モデルの一部としてインタフェース宣言
記録/参照(Repository インタフェース)
通知 (Transfer インタフェース)
データベースの都合をドメインオブジェクトに持ち込まない
インタフェースで実装を分離する
依存性の逆転
データソース層がドメインモデルに依存する
データソース層と
ドメインオブジェクト
@Repository
MyBatis SQL mapping
Transfer interface
RestTemplate
JmsTemplate
MailSender
データソース層
@Repository
ドメインモデル
オブジェクトとテーブル
異なる世界のマッピング
データソース層
オブジェクトとテーブル
異なる世界を明示的にマッピング
ドメインオブジェクトはロジックの置き場所
テーブルの構造を持ち込まない
テーブルは事実を正しく記録するために
徹底的に正規化する
(Not Null制約、一意制約、参照制約)
データソースの実装
@Repository
public class PersonDatasource implements PersonRepository {
@Autowired
PersonMapper mapper;
@Override
public Person findBy(PersonNumber number) {
return mapper.findBy(number);
}
}
@Mapper
public interface UserMapper {
Person findBy(@Param(“number”) PersonNumber number);
}
データソースの実装
<resultMap id= person" type="example.domain.model.user.Person">
<id property= id" column= user_id"/>
<result property="name" column="name"/>
<result property="dateOfBirth" column="date_of_birth"/>
</resultMap>
<select id="findBy" resultMap= person">
SELECT user_id, name, date_of_birth
FROM users.users
WHERE user_id = #{number}
</select>
SQLテンプレートからドメインオブジェクトを参照する
Personクラスに明示的にマッピングする
プレゼンテーション層
データソース層
アプリケーション層
ドメインを隔離する
@Controller
@Service
@Repository
ドメインモデル
ここを
インクリメンタルに
成長させながら
全体の開発を駆動する
ドメインロジックを
ここに集約する
ドメイン駆動設計
Domain-Driven Design
ソフトウェアの核心にある
複雑さに立ち向う
Tackling Complexity in the Heart of Software
ドメインロジックに集中する
モデルに基づき設計する
インクリメンタルに開発する
核心にある複雑さに立ち向う
ドメイン駆動設計
powered by Spring

Más contenido relacionado

La actualidad más candente

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)A AOKI
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する増田 亨
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2増田 亨
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計増田 亨
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう増田 亨
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD増田 亨
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント増田 亨
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース増田 亨
 

La actualidad más candente (20)

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 

Destacado

lazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftTomohiro Kumagai
 
Gradle入門
Gradle入門Gradle入門
Gradle入門orekyuu
 
CEDEC2014 「ライブラリを作ってはいけない ~それでも作りたいあなたへのアドバイス~」
CEDEC2014 「ライブラリを作ってはいけない ~それでも作りたいあなたへのアドバイス~」CEDEC2014 「ライブラリを作ってはいけない ~それでも作りたいあなたへのアドバイス~」
CEDEC2014 「ライブラリを作ってはいけない ~それでも作りたいあなたへのアドバイス~」Yoshihiro Kurohata
 
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」Junichiro Kazama
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門Yoshimura Soichiro
 
ドメイン駆動設計 複雑さに立ち向かう
ドメイン駆動設計 複雑さに立ち向かうドメイン駆動設計 複雑さに立ち向かう
ドメイン駆動設計 複雑さに立ち向かう増田 亨
 
さくさく要件定義セミナー in 大阪
さくさく要件定義セミナー in 大阪さくさく要件定義セミナー in 大阪
さくさく要件定義セミナー in 大阪Zenji Kanzaki
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則増田 亨
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 

Destacado (10)

lazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswiftlazy var の特徴を知る #cocoa_kansai #cswift
lazy var の特徴を知る #cocoa_kansai #cswift
 
Gradle入門
Gradle入門Gradle入門
Gradle入門
 
CEDEC2014 「ライブラリを作ってはいけない ~それでも作りたいあなたへのアドバイス~」
CEDEC2014 「ライブラリを作ってはいけない ~それでも作りたいあなたへのアドバイス~」CEDEC2014 「ライブラリを作ってはいけない ~それでも作りたいあなたへのアドバイス~」
CEDEC2014 「ライブラリを作ってはいけない ~それでも作りたいあなたへのアドバイス~」
 
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
ドメイン駆動設計 複雑さに立ち向かう
ドメイン駆動設計 複雑さに立ち向かうドメイン駆動設計 複雑さに立ち向かう
ドメイン駆動設計 複雑さに立ち向かう
 
さくさく要件定義セミナー in 大阪
さくさく要件定義セミナー in 大阪さくさく要件定義セミナー in 大阪
さくさく要件定義セミナー in 大阪
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 

Similar a ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring

ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する増田 亨
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにAtsuhiro Kubo
 
RDRA DDD Agile
RDRA DDD AgileRDRA DDD Agile
RDRA DDD Agile増田 亨
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門増田 亨
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with SymfonyAtsuhiro Kubo
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀増田 亨
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Tomoharu ASAMI
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】Tomoharu ASAMI
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
DDD 20121106 SEA Forum November
DDD 20121106 SEA Forum NovemberDDD 20121106 SEA Forum November
DDD 20121106 SEA Forum November増田 亨
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】増田 亨
 
エリック・エヴァンスのドメイン駆動設計 第3部〜8章まで
エリック・エヴァンスのドメイン駆動設計 第3部〜8章までエリック・エヴァンスのドメイン駆動設計 第3部〜8章まで
エリック・エヴァンスのドメイン駆動設計 第3部〜8章までakimichi Yamada
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発Tomoharu ASAMI
 
とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例agileware_jp
 
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線Akira Inoue
 
社内 DDD 勉強会 #2
社内 DDD 勉強会 #2社内 DDD 勉強会 #2
社内 DDD 勉強会 #2shingo suzuki
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説Daisuke Nishino
 
Hello ".NET" World
Hello ".NET" WorldHello ".NET" World
Hello ".NET" World将 高野
 

Similar a ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring (20)

ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
 
RDRA DDD Agile
RDRA DDD AgileRDRA DDD Agile
RDRA DDD Agile
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 
DDD 20121106 SEA Forum November
DDD 20121106 SEA Forum NovemberDDD 20121106 SEA Forum November
DDD 20121106 SEA Forum November
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
エリック・エヴァンスのドメイン駆動設計 第3部〜8章まで
エリック・エヴァンスのドメイン駆動設計 第3部〜8章までエリック・エヴァンスのドメイン駆動設計 第3部〜8章まで
エリック・エヴァンスのドメイン駆動設計 第3部〜8章まで
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
 
とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例
 
20010127
2001012720010127
20010127
 
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
 
社内 DDD 勉強会 #2
社内 DDD 勉強会 #2社内 DDD 勉強会 #2
社内 DDD 勉強会 #2
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
 
Hello ".NET" World
Hello ".NET" WorldHello ".NET" World
Hello ".NET" World
 

Más de 増田 亨

ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善増田 亨
 
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述増田 亨
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン増田 亨
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来増田 亨
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう増田 亨
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer増田 亨
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル増田 亨
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル増田 亨
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える増田 亨
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ増田 亨
 
マイクロサービス 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 基幹システムの再定義と再構築増田 亨
 
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる増田 亨
 

Más de 増田 亨 (20)

ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
 
マイクロサービス 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 基幹システムの再定義と再構築
 
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
 

ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring