Submit Search
Upload
ドメイン駆動設計という設計スタイル
•
33 likes
•
17,453 views
増田 亨
Follow
設計スタイルの選択 ドメインロジックに焦点を合わせる 現場での実験結果と考察
Read less
Read more
Report
Share
Report
Share
1 of 63
Download now
Download to read offline
Recommended
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
ドメイン駆動設計の考え方、3原則、基本テクニック 1章から7章
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
増田 亨
ドメイン駆動設計の内輪の勉強会用に作ったドメインオブジェクトの設計ガイドラインを公開します。
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
ドメイン駆動設計の考え方、ドメイン駆動設計を理解する三つのキーワード、エヴァンス本のススメ、レガシーに立ち向かう、マイクロサービスとドメイン駆動設計
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
ドメイン駆動設計の要点は3つ。ビジネスルール・値オブジェクト・型
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
ドメイン駆動設計でなぜ作るのか? ドメイン駆動設計の考え方 ドメイン駆動設計を実践するための6つの問い 事例研究 ドメイン駆動設計を現場に導入する 体験的に学ぶ エヴァンス本をちゃんと読む
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
第2シーズンに向けて、設計コースの内容と進め方について、説明会の資料
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
Koichiro Matsuoka
ドメイン駆動設計 モデリング/実装ガイド https://little-hands.booth.pm/items/1835632 発売記念に、本書の1,2章の内容を中心にDDDの概要について解説する勉強会です。
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
Modeling Forum 2018 技術公演トラックで発表した内容となります。 VernonVaughn Vernon 氏が発表 した書籍「 実践ドメイン駆動設計(通称: IDDD )」の 流れに沿って、 DDD の基本からモデリング手法までを 幅広く紹介します。
Recommended
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
ドメイン駆動設計の考え方、3原則、基本テクニック 1章から7章
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
増田 亨
ドメイン駆動設計の内輪の勉強会用に作ったドメインオブジェクトの設計ガイドラインを公開します。
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
ドメイン駆動設計の考え方、ドメイン駆動設計を理解する三つのキーワード、エヴァンス本のススメ、レガシーに立ち向かう、マイクロサービスとドメイン駆動設計
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
ドメイン駆動設計の要点は3つ。ビジネスルール・値オブジェクト・型
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
ドメイン駆動設計でなぜ作るのか? ドメイン駆動設計の考え方 ドメイン駆動設計を実践するための6つの問い 事例研究 ドメイン駆動設計を現場に導入する 体験的に学ぶ エヴァンス本をちゃんと読む
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
第2シーズンに向けて、設計コースの内容と進め方について、説明会の資料
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
Koichiro Matsuoka
ドメイン駆動設計 モデリング/実装ガイド https://little-hands.booth.pm/items/1835632 発売記念に、本書の1,2章の内容を中心にDDDの概要について解説する勉強会です。
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
Modeling Forum 2018 技術公演トラックで発表した内容となります。 VernonVaughn Vernon 氏が発表 した書籍「 実践ドメイン駆動設計(通称: IDDD )」の 流れに沿って、 DDD の基本からモデリング手法までを 幅広く紹介します。
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
エヴァンス本を読んだことがない人、ネット上の情報を聞きかじったことがある程度の人、そんな人たちを対象に、ドメイン駆動設計について、わかりやすく説明してみました。
DDD sample code explained in Java
DDD sample code explained in Java
増田 亨
2019-02-18 #jsug ドメイン駆動設計サンプルコード徹底解説
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
増田 亨
要件定義・仕様化・実装の継ぎ目をなくす開発手法。 ビジネスロジックを軸に組み立てる。 値の種類(型)に注目してモジュール化する
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ドメイン駆動設計の4つの基本活動、Springのプログラミングモデル、ドメイン駆動設計のためのSpringの使い方
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
その時は最善の実装だと思っていたことでも、月日が立つことで、それは間違いだったと気づくことがあります。 5年という歳月はそれを気づかせるには十分な時間で、 DDDをやり始めた初期の頃に書かれたコードは良くディスられたりしています。 そのコードは何を失敗していたのか?そして、それは改善するために改善した事とは? BIGLOBEにおける"今"のいいコードの書き方をできる限り具体的な事例を元に紹介します。
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
増田 亨
ドメインロジックに焦点をあてる。 それが、ドメイン駆動設計の基本。 ドメイン駆動設計の考え方とやり方の説明と、実践基盤としての Spring Framework/Spring Boot を使った事例の紹介。
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
ドメイン駆動設計 Domain-Driven Design ( DDD ) 準備 / スタートアップ / ブラッシュアップ / チャレンジ / 参考書籍 /
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
増田 亨
前半は、ドメイン駆動設計を特徴づける4つのポイントを、後半は、エヴァンス本の構成を俯瞰しながら、解説してみました。 gunma.web #30 での発表資料。
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
増田 亨
ドメイン駆動設計に戦略的に取り組むための基本パターン「コアドメイン」について、4つの現場のインタビュー結果と、それをもとに、みんなで語り合ってみるワークショップ
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
関西DDD.java 勉強会 2016-3-5 (DDD Alliance 勉強会 2016-1-21 @東京の京都再演版)
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例 http://cedec.cesa.or.jp/2019/session/detail/s5c7f93801888e
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
より詳細なCQRSに関する資料はこちら https://little-hands.hatenablog.com/entry/2019/12/02/cqrs 参考資料:http://little-hands.hatenablog.com/entry/jjug2017fall 社内新規プロダクトでDDD, CQRSの思想をベースとしたアーキテクチャを構築し、コマンド(更新系処理)ではSpring Data JPA(Hibernate)を、クエリ(参照系処理)ではjOOQを採用しました。 結果としてそれぞれのORMの良いところを生かした組み合わせのアーキテクチャが構築できたので、その経緯と得られた知見についてお話ししたいと思います。 以下のようなトピックを考えています。 ・CQRSの定義とメリットデメリット ・DDD,CQRSを検討するにあたってのORMの選定ポイント ・構築したアーキテクチャ CQRSはDDDと切り分けて単独でも適用することができるので、DDDについてご存知ない方もご覧いただけます。日本語の文献は意外と少ないので、この辺りの分野に興味がある人の参考になれば幸いです。
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
増田 亨
「ドメイン駆動設計」の第4部の概要と理解の手がかり。現場での実践経験から。
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
ドメイン駆動設計で、モデリングをどうやっているか、それをどう実装に結びつけているかの事例紹介。 RDRA+ICONXをベースに、より機敏なやり方への挑戦。実践的なオブジェクト指向設計。
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
java_ja java_ja_ddd 2013-3-22 発表。ドメイン駆動設計(DDD)の実践
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
Java/Spring Boot/MyBatis/Thymeleafを使った、ドメイン駆動設計のサンプルコード。ビジネスルールに焦点を合わせ、計算モデルで複雑さを整理し、型指向のプログラミングで実装する、その具体例。
ドメイン駆動設計入門
ドメイン駆動設計入門
Takuya Kitamura
関西Javaエンジニアの会'13 7月度 発表資料 http://kanjava.connpass.com/event/2740/
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
ドメイン駆動設計 のための オブジェクト指向設計 の基本と実装技法。
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
関西DDD.java ドメイン駆動設計の原則、全17章の要点、実践してみて学んだこと
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
増田 亨
CCSR開発手法のための、分析設計パターンの概略
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
1995年まで:イノベータとアーリーアダプターの時代; 1995-2005 : オブジェクト指向ブームと混乱の始まり; 2005-2015 : さらなる混乱と収束の兆し; 2015- ; 現在の状況とこれからの20年
More Related Content
What's hot
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
エヴァンス本を読んだことがない人、ネット上の情報を聞きかじったことがある程度の人、そんな人たちを対象に、ドメイン駆動設計について、わかりやすく説明してみました。
DDD sample code explained in Java
DDD sample code explained in Java
増田 亨
2019-02-18 #jsug ドメイン駆動設計サンプルコード徹底解説
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
増田 亨
要件定義・仕様化・実装の継ぎ目をなくす開発手法。 ビジネスロジックを軸に組み立てる。 値の種類(型)に注目してモジュール化する
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ドメイン駆動設計の4つの基本活動、Springのプログラミングモデル、ドメイン駆動設計のためのSpringの使い方
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
その時は最善の実装だと思っていたことでも、月日が立つことで、それは間違いだったと気づくことがあります。 5年という歳月はそれを気づかせるには十分な時間で、 DDDをやり始めた初期の頃に書かれたコードは良くディスられたりしています。 そのコードは何を失敗していたのか?そして、それは改善するために改善した事とは? BIGLOBEにおける"今"のいいコードの書き方をできる限り具体的な事例を元に紹介します。
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
増田 亨
ドメインロジックに焦点をあてる。 それが、ドメイン駆動設計の基本。 ドメイン駆動設計の考え方とやり方の説明と、実践基盤としての Spring Framework/Spring Boot を使った事例の紹介。
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
ドメイン駆動設計 Domain-Driven Design ( DDD ) 準備 / スタートアップ / ブラッシュアップ / チャレンジ / 参考書籍 /
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
増田 亨
前半は、ドメイン駆動設計を特徴づける4つのポイントを、後半は、エヴァンス本の構成を俯瞰しながら、解説してみました。 gunma.web #30 での発表資料。
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
増田 亨
ドメイン駆動設計に戦略的に取り組むための基本パターン「コアドメイン」について、4つの現場のインタビュー結果と、それをもとに、みんなで語り合ってみるワークショップ
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
関西DDD.java 勉強会 2016-3-5 (DDD Alliance 勉強会 2016-1-21 @東京の京都再演版)
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例 http://cedec.cesa.or.jp/2019/session/detail/s5c7f93801888e
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
より詳細なCQRSに関する資料はこちら https://little-hands.hatenablog.com/entry/2019/12/02/cqrs 参考資料:http://little-hands.hatenablog.com/entry/jjug2017fall 社内新規プロダクトでDDD, CQRSの思想をベースとしたアーキテクチャを構築し、コマンド(更新系処理)ではSpring Data JPA(Hibernate)を、クエリ(参照系処理)ではjOOQを採用しました。 結果としてそれぞれのORMの良いところを生かした組み合わせのアーキテクチャが構築できたので、その経緯と得られた知見についてお話ししたいと思います。 以下のようなトピックを考えています。 ・CQRSの定義とメリットデメリット ・DDD,CQRSを検討するにあたってのORMの選定ポイント ・構築したアーキテクチャ CQRSはDDDと切り分けて単独でも適用することができるので、DDDについてご存知ない方もご覧いただけます。日本語の文献は意外と少ないので、この辺りの分野に興味がある人の参考になれば幸いです。
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
増田 亨
「ドメイン駆動設計」の第4部の概要と理解の手がかり。現場での実践経験から。
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
ドメイン駆動設計で、モデリングをどうやっているか、それをどう実装に結びつけているかの事例紹介。 RDRA+ICONXをベースに、より機敏なやり方への挑戦。実践的なオブジェクト指向設計。
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
java_ja java_ja_ddd 2013-3-22 発表。ドメイン駆動設計(DDD)の実践
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
Java/Spring Boot/MyBatis/Thymeleafを使った、ドメイン駆動設計のサンプルコード。ビジネスルールに焦点を合わせ、計算モデルで複雑さを整理し、型指向のプログラミングで実装する、その具体例。
ドメイン駆動設計入門
ドメイン駆動設計入門
Takuya Kitamura
関西Javaエンジニアの会'13 7月度 発表資料 http://kanjava.connpass.com/event/2740/
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
ドメイン駆動設計 のための オブジェクト指向設計 の基本と実装技法。
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
関西DDD.java ドメイン駆動設計の原則、全17章の要点、実践してみて学んだこと
What's hot
(20)
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
DDD sample code explained in Java
DDD sample code explained in Java
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計入門
ドメイン駆動設計入門
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
More from 増田 亨
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
増田 亨
CCSR開発手法のための、分析設計パターンの概略
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
1995年まで:イノベータとアーリーアダプターの時代; 1995-2005 : オブジェクト指向ブームと混乱の始まり; 2005-2015 : さらなる混乱と収束の兆し; 2015- ; 現在の状況とこれからの20年
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
Javaで学ぶ、オブジェクト指向プログラミングの基礎知識。型とカプセル化が腹落ちすると、びっくりするくらいオブジェクト指向プログラミングがわかようになる/できるようになる
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
増田 亨
正しいものを正しくつくる プロダクトづくりの不確実性と戦うためのソフトウェア設計 - 創発的な設計活動 - 柔軟なモジュール構造 - 20%に投資する
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
増田 亨
ソフトウェア設計の課題 ソフトウエア設計の品質 学習と成長 設計の初歩を学ぶ 中級者への道 上級者の挑戦
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
増田 亨
ドメイン駆動設計でなぜ作るのか? ドメイン駆動設計の考え方の核心 レガシーコードの改善にドメイン駆動設計が役に立つのか? ドメイン駆動設計でレガシーコードに立ち向かった8つのステップ 振り返りと展望
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
アプリケーションの分割のアプローチ ●4つのアプローチ - ビジネスファンクション - 動詞/ユースケース - 名詞/リソース - 境界づけられたコンテキスト ● トランザクションの分割 - パイプライン化 (VETRO) - コーディネート (Saga) - 状態更新の非同期化 ( Event History - State Materialize - Domain Specific Query )
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
増田 亨
ビジネスルールのソフトウェア表現、現実世界のビジネスルール、ドメインモデルの俯瞰と構造化、事業モデルの俯瞰と枠組み 4つの領域をいったりきたりする。 広げながら掘り下げる。 役に立つソフトウェアを開発するスキルを磨いていく。
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
増田 亨
ドメイン駆動設計でなぜつくるのか? 「核心にある複雑さ」とは何か? その複雑さにどう立ち向かうか?
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
増田 亨
変更を楽に安全にする4つの根底技法の紹介。
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
ドメイン駆動設計の基礎知識の説明と、ゲーム開発への活かし方。
SoR 2.0 summary
SoR 2.0 summary
増田 亨
事業環境と事業活動の変化に、柔軟に、迅速に、低コストで対応するためのアプローチの検討
毎日が越境だ!
毎日が越境だ!
増田 亨
エンジニアの学習と成長◆古い設計スタイルの呪縛を解く4つの合言葉◆「だいたいわかっている」の壁を突き抜ける5つの学習パターン
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
増田 亨
SoE, SoI の基盤となる次世代の SoR のあり方は何か? どこに着眼し、どういう方向を目指すか?
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
増田 亨
レガシー化した既存システムを、どのように改善・発展させていくか。アーキテクチャの設計改善への取り組みの中間報告。
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
増田 亨
ドメイン駆動設計の基礎知識として、プログラミングの基本単位としての「型」、型の生産者という設計スタイル、小さな実験を繰り返すという開発スタイルを簡単にまとめてみました。ちょっとディープな参考資料へのリンク付き。
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
DDD Alliance での発表内容。イベント参加者に事前記入してもらった質問や意見への私からの回答
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
アジャイル札幌、DevLove仙台のジョイントイベントでお話させていただいた内容。
More from 増田 亨
(18)
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
SoR 2.0 summary
SoR 2.0 summary
毎日が越境だ!
毎日が越境だ!
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
ドメイン駆動設計という設計スタイル
1.
ドメイン駆動設計という 設計スタイル ギルドワークス 増田 亨 2019.8.31 レガシーをぶっつぶせ!
現場でDDD #genbadeDDD
2.
これから話すこと 2019/8/31 2 設計スタイルの選択 ドメインロジックに焦点をあわせる 開発現場での実験結果と考察
3.
設計スタイルの選択 32019/8/31
4.
設計スタイルの三つの側面 2019/8/31 4 関心の分離のアプローチ モジュール構造の考え方 20:80のとらえ方
5.
設計スタイルの三つの側面 2019/8/31 5 関心の分離のアプローチ モジュール構造の考え方 20:80のとらえ方 何と何を分けるか? 何と何を一体にするか ソースコードをどう分割し、どう組み立てるか 80%に大きな影響を及ぼす20%はどこか
6.
設計スタイルの違い 2019/8/31 6 関心 モジュール構造 20:80
7.
設計スタイルの違い 2019/8/31 7 関心 モジュール構造 20:80 入出力 ドメインロジック
8.
設計スタイルの違い 2019/8/31 8 関心 モジュール構造 20:80 入出力 ドメインロジック ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web
API
9.
設計スタイルの違い 2019/8/31 9 関心 モジュール構造 20:80 入出力 ドメインロジック ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web
API トランザクションスクリプト ドメインオブジェクトモデル
10.
設計スタイルの違い 2019/8/31 10 関心 モジュール構造 20:80 入出力 ドメインロジック ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web
API トランザクションスクリプト 画面やデータに注目して、入出力手続きを構造化 値の種類に注目して、独自の型を定義 ドメインオブジェクトモデル
11.
設計スタイルの違い 2019/8/31 11 関心 モジュール構造 20:80 入出力 ドメインロジック ビジネスルールに基づく計算と判断のロジック画面、テーブル、Web
API トランザクションスクリプト ドメインロジックの設計と実装が アプリケーション全体の構造を左右する 画面やデータに注目して、入出力手続きを構造化 値の種類に注目して、独自の型でロジックを構造化 入出力の設計と実装が アプリケーション全体の構造を左右する ドメインオブジェクトモデル
12.
ドメイン駆動設計の設計スタイル 2019/8/31 12 ビジネスルールに基づく計算と判断のロジック に焦点を合わせる
13.
ドメイン駆動設計の設計スタイル 2019/8/31 13 ビジネスルールに基づく計算と判断のロジック に焦点を合わせる ビジネスルールに登場する値の種類に注目して 独自の型を定義してロジックを整理する
14.
ドメイン駆動設計の設計スタイル 2019/8/31 14 ビジネスルールに基づく計算と判断のロジック に焦点を合わせる ビジネスルールに登場する値の種類に注目して 独自の型を定義してロジックを整理する ビジネスルールを記述する部分の設計と実装が アプリケーション全体の構造と秩序を左右する
15.
ドメインロジックに焦点を合わせる 2019/8/31 15
16.
2019/8/31 16 ドメインロジックに 焦点を合わせる ドメイン知識のコード表現 継続的な改善 ドメインの知識を 学び続ける 実践する 実践する 相互に補完する
17.
ドメインロジック、ドメインの知識 2019/8/31 17 意味が広く、あいまい もっと具体的に考える ドメインロジック →
ビジネスロジック ドメイン知識 → ビジネスルール
18.
2019/8/31 18 ビジネスの活動 ビジネスルール ビジネスロジック 制約する/促進する ビジネスルールに基づく計算ロジックや判断ロジック ドメインの知識 ドメインロジック
19.
2019/8/31 19 ビジネスロジック ビジネスルールに基づく計算と判断のロジック
20.
2019/8/31 20 ビジネスロジックに 焦点を合わせる ビジネスルールの コード表現の工夫と改善 ビジネスルールを 学び続ける 実践する 実践する 相互に補完する
21.
ビジネスルール 2019/8/31 21 ビジネスの活動を制約し促進する決め事 物理法則のような論理的な体系ではない 過去の意思決定の積み重ね 現在のビジネスルール体系は通過点 これからもビジネスルールの追加や変更が続く
22.
ビジネスルールを学び続ける 2019/8/31 22 ビジネスルールの知識を広げると、要求の意味が理解できる ビジネスルールを深く理解すると、関係性や構造が見えてくる 詳細な仕様の補完力と提案力が増す ビジネスとビジネスルールは時間とともに変化し続ける
23.
現場で役立つビジネスルールの基礎知識 2019/8/31 23 ドメインエキスパートとか、ユビキタス言語とか言う前に
24.
ドメイン層の全体構造を設計する時の指針 2019/8/31 24 文書化(構造化)された ビジネスルール 顧客の利益 vs
自社の利益 折り合いのつけ方の決め事 競争戦略とビジネスルール ビジネスルールの階層構造 こういう基礎的な知識を学び理解すると、ドメイン層のパッケージ構造の設計の質が変わってくる
25.
文書化(構造化)されたビジネスルール 説明 顧客に向けた取引条件や利用条件の説明 価格表、利用案内、割引、特典、返品・返金、キャンセル、… 契約書 提供の約束、支払いの約束 提供できなかった時の約束、支払いできなかった時の約束 業務マニュアル 販売ポリシー、在庫ポリシー、サービスレベルポリシー、… 役職・権限・承認ルール 簿記・予実管理 売上、費用、利益の目標と実績 管理単位(部門、期間、集計、…) 2019/5/11 25 文書化の範囲や精度は、組織によってまちまち 上場企業(とその子会社)と非上場企業の差は大きい
26.
顧客の利益 vs 自社の利益 どこで折り合いをつけるかの決め事 Customer Value 顧客価値
提供する商品、提供するサービス内容の決め事 Customer Cost 顧客からみたコスト 価格、値引き、特典にからむビジネスルール Convenience 顧客の利便性 提供方法、提供場所、提供タイミングのビジネスルール Communication 顧客との コミュニケーション 顧客とのコミュニケーションに関するビジネスルール 2019/5/11 26 ビジネスルールは、コストの制限、リスク回避の決め事であることが多い ドメイン層のパッケージ分割の設計パターンのひとつ
27.
競争戦略とビジネスルール リーダー 強い競争力 大きな経営資源 他のプレーヤーの強みを消すためのビジネスルール変更が多くなる (そういう意味では後追い型の変更) チャレン ジャー 独自優位性に挑戦 大きな経営資源 仮説検証型、企画型のビジネスルール変更が多くなる 新しい商品、新しい販売方法、新しい特典、… フォロワー 弱い競争力 弱い経営資源 生き残りのための後追い型のビジネスルール変更が多くなる 資源がないので、ルール変更も場当たりや中途半端になりがち ニッチャ 独自性が強く 経営資源は小さい 独自性を維持・強化することに集中する ビジネスルールは独自かつ複雑になりがち 選択と集中の意思決定が明確 2019/5/11 27 その事業の競争戦略によって、パッケージの依存関係や中核となるパッケージが変わってくる
28.
ビジネスルールの階層構造 ポリシー 事業運営の決め事 ビジネスルールの方針 価格、割引、優遇、拒絶 オーバーブッキング キャンセル 約束 顧客との契約 取引先との契約 見積 予約 注文 運用 ビジネス活動の実体(イベント) ビジネスルールの起動トリガー 出荷、売り上げ 請求、回収 能力 ビジネス運営上の制約条件 在庫 出荷能力 サービス提供能力 2019/5/11 28 エヴァンス本
責務のレイヤーにも登場する階層構造のパターン
29.
ビジネスルールをコードで表現する 基本テクニック 2019/8/31 29
30.
2019/8/31 30 ビジネスロジックに 焦点を合わせる ビジネスルールの コード表現の工夫と改善 ビジネスルールを 学び続ける 実践する 実践する 相互に補完する
31.
2019/8/31 31 ビジネスルールとコード表現 Fact, Rule,
Goalを表現する 独自の型を定義する 値の種類に注目する
32.
ビジネスルールの構成要素 Fact 事実を表現する型 ビジネスの状況の記録や通知に使う型 ・ 数値、日付、場所、識別番号、名称、… Rule
Factを使った 計算や判定のロジック オブジェクトが持つべき演算能力 ・算術演算 ・同一性の判定 ・大小の比較 Goal 知りたいことを表現する型 計算結果や判定結果を表現する型 ・合計金額、予定日、残数、… ・出荷可否、受付可否、割引種類、… 2019/5/11 32
33.
独自の型を定義する 2019/8/31 33 型は値の種類(金額、数量、日付、…) 型は値の範囲を制限する 型は可能な操作(演算)を制限する 型はプログラムに構造と秩序をもたらす 型の名前がコードの意図を豊かに表現する
34.
現場で役立つ独自の型の設計パターン 2019/8/31 34 計算・判断ロジックのカプセル化 条件分岐を明示的に扱う コレクション操作のカプセル化
35.
値オブジェクト 計算・判断ロジックのカプセル化 単一の値 範囲(fromとto) 数値 金額型 Amount, Money 金額範囲 x円以上
y円未満 数量型 Quantity, NumberOfXxx 数量範囲 m人以上 n人以下 率型 Percentage, Permillage 率範囲 m%以上 n%未満 時間 日付型 DueDate, XxxDate 期間 開始日 - 終了日 時刻型 HourTime, XxxTime 時間 開始時刻 – 終了時刻 空間 地点型 Point 接続 Path:出発点 – 到達点 2019/5/11 35
36.
計算の種類 説明、メソッド例 結果の型 等値判定
isEqual( other ) , notEqual( other ) boolean / enum 大小判定 greaterThan( other ), lessThan( other ), … boolean / enum 加算・減算 同じ型同士の計算 同じ型 乗算 同じ型同士の乗算は意味がないことが多い 別の数値型 除算 同じ型の除算と、異なる型の除算では、意味が異なる 別の数値型 境界 Max, Min の定義 同じ型(の固定値) 列挙の操作 previous(), next() が可能な集合 (循環が可/不可) 同じ型 文字列表現 値の標準的な文字列表現 toString() 文字列型 文字列からの生成 標準的な文字列表現からのオブジェクト生成 parse() 同じ型 単一値の計算・判定ロジック 2019/5/11 36
37.
計算の種類 説明、メソッド例 結果の型 等値判定
isEqual( other ) , notEqual( other ) boolean / enum 大小判定 greaterThan( other ), lessThan( other ), … boolean / enum 範囲に含まれる contains( element ), encloses( other ) boolean / enum 範囲が重複する isOverlapped(other) boolean / enum 厳密に隣接する isConnectedTo(other) boolean / enum 境界の値 Max, Min 要素の型 範囲演算 intersect(other), minus(other), add(other) 範囲型 文字列表現 標準的な文字列表現 toString(), show(), describe() 文字列型 範囲型(from-to)の計算・判定ロジック 2019/5/11 37
38.
値オブジェクト(独自の型)の効果 2019/8/31 38 ➢独自の型はロジックを集約する • 型名=ルール名 •
金額型=金額の計算ルール、金額の判断ルールの置き場所 • ロジックが一か所に集まる(コードの重複を防ぐ) ➢独自の型は可読性を向上する • コードの曖昧性が減る → コードの意図が理解しやすい • プリミティブな型は汎用。独自の型は用途限定。 • 整数演算をしたいのではなく、金額計算をしたい。
39.
値オブジェクト(独自の型)の効果 2019/8/31 39 ➢独自の型は信頼性を向上する (契約による設計) •
引数の型 → 必ず有効な値を渡す約束 • メソッドが返す型 → 必ず有効な値を返す約束 • 冗長な検査ロジックが不要になる(例えば null チェック) ➢独自の型はコードの追跡を容易かつ確実にする • 型を使っている個所 = そのビジネスルールに関係する個所 • 型による追跡性 vs 変数名による追跡性 • アプリケーション全体で、ビジネスの関心事との対応がとれたコードが増 える
40.
条件分岐を型で表現する 2019/8/31 40
41.
条件分岐との戦い 2019/8/31 41 顧客区分、商品種別、有効期間、地域区分、金額区分、数量区分、 取引種類、取引状態、支払い方法、支払いタイミング、 割り増し条件、割引条件、キャンセル可能条件、… if文、boolean で表現された 暗黙的な区分 レガシーで 怪しげなコード体系 未使用と思われるコード 複数の分類軸の混在したコードマスター 通常の区分と超レアケースの混在
… 区分名が登場しない条件判断式 true/false に隠蔽された区分
42.
区分の明示化とリファクタリング 2019/8/31 42 if文やboolean で 表現された暗黙の区分 レガシーで 怪しげなコード体系
43.
区分の明示化とリファクタリング 2019/8/31 43 型を使った 列挙 たとえば Java
enum if文やboolean で 表現された暗黙の区分 レガシーで 怪しげなコード体系
44.
区分の明示化とリファクタリング 2019/8/31 44 型を使った 列挙 enumに区分ごとの 計算・判定ロジックを寄せる たとえば Java
enum コードがぎこちなくなったら 区分体系のリファクタリング if文やboolean で 表現された暗黙の区分 レガシーで 怪しげなコード体系
45.
区分の明示化とリファクタリング 2019/8/31 45 型を使った 列挙 区分体系のリファクタリング enumに区分ごとの 計算・判定ロジックを寄せる たとえば Java
enum 区分名の変更 分類軸の分割 例外的区分の除去 区分が整理できたら、計算・判定ロジックを寄せる コードがぎこちなくなったら 区分体系のリファクタリング if文やboolean で 表現された暗黙の区分 レガシーで 怪しげなコード体系
46.
区分の明示化とリファクタリング 2019/8/31 46 型を使った 列挙 区分体系のリファクタリング enumに区分ごとの 計算・判定ロジックを寄せる たとえば Java
enum 区分名の変更 分類軸の分割 例外的区分の除去 区分が整理できたら、計算・判定ロジックを寄せる コードがぎこちなくなったら 区分体系のリファクタリング if文やboolean で 表現された暗黙の区分 レガシーで 怪しげなコード体系 改善を繰り返す
47.
条件分岐を型安全にする効果 2019/8/31 47 ➢列挙型(区分値)にロジックが集まる ➢列挙型(区分名)が可読性を向上する ➢列挙型による信頼性の向上(契約による設計) ➢列挙型はコードの追跡を容易かつ確実にする
48.
ビジネスルールをコレクションで表現する 2019/8/31 48
49.
ビジネスルールの記述にコレクションを使う 2019/8/31 49 Mapを使った料金ルールの早見表 Setを使ったスキルセットのマッチングロジック Listを使った集計、最適要素の発見 ロジックを集約した型のコレクション コレクションのコレクション
50.
操作の種類 説明、メソッド例 結果の型 サイズ
count() int 要素の検査 contains(要素), isEmpty(), notEmpty() boolean / enum 部分集合 select(条件), reject(条件), コレクション 集約演算 sum(), min(), max(), average(), … 集約結果の型 集合演算 insersect(other), minus(other), add(other) コレクション 変換 unique(), sort(), groupBy() コレクション 要素の取り出し first(), last(), at(index) 要素の型 要素の追加 add(), addAll(), append(), insertAt(), … void 文字列表現 show(), describe() 文字列, 文字列[ ] コレクション操作のカプセル化 2019/5/11 50
51.
コレクションをカプセル化する効果 2019/8/31 51 ➢コレクションを内部に持った独自の型にコレク ション操作ロジックが集まる ➢型名が可読性を向上する ➢型による信頼性の向上(契約による設計) ➢独自のコレクション型はコードの追跡を容易か つ確実にする
52.
ビジネスルールを独自の型で表現する 2019/8/31 52
53.
独自の型を使う効果 2019/8/31 53 ➢独自の型にビジネスロジックが集まる ➢型名が可読性を向上する ➢型による信頼性の向上(契約による設計) ➢型はコードの追跡を容易かつ確実にする
54.
ビジネスルールを独自の型で表現する 役立つ技法の学び方 2019/8/31 54
55.
エヴァンス本の拾い読みのススメ 2019/8/31 55 1章 継続的な学習、知識豊富な設計、深いモデル 2章
声に出してモデリングする、説明のためのモデル 9章 概念を掘り出す、それほど明示的でない概念をモデル化する方法 10章 閉じた操作、副作用のない関数、設計の宣言的スタイル 15章 コアドメイン、蒸留の拡大、強調されたコア、隔離されたコア 16章 責務のレイヤ 17章 大規模な構造と蒸留を組み合わせる 全体:クラス図にメソッド定義 or 制約の記述がある個所 ビジネスロジックに焦点を合わせ、独自の型を定義するための必読個所
56.
ビジネスルールを型で表現した サンプルコードが豊富 2019/8/31 56
57.
開発現場での実験結果と考察 2019/8/31 57
58.
ドメイン駆動設計の設計スタイル 2019/8/31 58 ビジネスルールに基づく計算と判断のロジック に焦点を合わせる ビジネスルールに登場する値の種類に注目して 独自の型を定義してロジックを整理する ビジネスルールを記述する部分の設計と実装が アプリケーション全体の構造と秩序を左右する
59.
現場で確認できたこと 2019/8/31 59 コードを考えて書く人 コードを書かない人
60.
現場で確認できたこと 2019/8/31 60 コードを考えて書く人 コードで具体的に話せるので、意図ややり方は確実に伝わる サンプルコード、可視化ツール、ガイドラインもだいぶ整った 入出力に焦点をあわせる設計スタイルからの転換パターンは個人差 体にどのくらいしみついているか? どのくらい発想が柔軟か? コードを書かない人
61.
現場で確認できたこと 2019/8/31 61 コードを考えて書く人 コードで具体的に話せるので、意図ややり方は確実に伝わる サンプルコード、可視化ツール、ガイドラインもだいぶ整った 入出力に焦点をあわせる設計スタイルからの転換パターンは個人差 体にどのくらいしみついているか? どのくらい発想が柔軟か? コードを書かない人 ドメイン駆動設計の設計スタイルを言葉で伝えるのは無理 時間のむだかも 設計やその影響に関心を持っているの関係者の一部だけ 「ドメイン駆動設計」をユビキタス言語にしない コードを書かない人の関心の文脈で、見せるようにする 可視化ツールは、そういう発想から生まれた
62.
コードで確認できる発想の変化 独自の型の量と質 パッケージの構造、パッケージ名 入出力の記述個所への独自の型の浸透 2019/8/31 62
63.
言葉と会話で確認できる発想の変化 タスク名、ToDo名、コミットログ 質問やアドバイスに登場する言葉 パッケージ名、クラス名、メソッド名の相談 ロジックの置き場所の相談 2019/8/31 63
Download now