Submit Search
Upload
私がドメイン駆動設計をやる理由
•
54 likes
•
22,914 views
増田 亨
Follow
DevLOVE現場甲子園2014 東日本大会 技
Read less
Read more
Software
Report
Share
Report
Share
1 of 25
Download now
Download to read offline
Recommended
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
増田 亨
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
増田 亨
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
Recommended
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
増田 亨
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
増田 亨
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス
増田 亨
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
増田 亨
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
増田 亨
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
増田 亨
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
増田 亨
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
ドメイン駆動設計入門
ドメイン駆動設計入門
Takuya Kitamura
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
ドメイン駆動設計 複雑さに立ち向かう
ドメイン駆動設計 複雑さに立ち向かう
増田 亨
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
増田 亨
How to customize redmine public
How to customize redmine public
Hirotaka Nishimiya
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove
Takao Oyobe
More Related Content
What's hot
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス
増田 亨
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
増田 亨
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
増田 亨
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
増田 亨
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
増田 亨
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
ドメイン駆動設計入門
ドメイン駆動設計入門
Takuya Kitamura
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
増田 亨
ドメイン駆動設計 複雑さに立ち向かう
ドメイン駆動設計 複雑さに立ち向かう
増田 亨
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
増田 亨
What's hot
(20)
実践に向けたドメイン駆動設計のエッセンス
実践に向けたドメイン駆動設計のエッセンス
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
ドメイン駆動設計入門
ドメイン駆動設計入門
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 複雑さに立ち向かう
ドメイン駆動設計 複雑さに立ち向かう
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
Viewers also liked
How to customize redmine public
How to customize redmine public
Hirotaka Nishimiya
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove
Takao Oyobe
ドメインモデルの育て方
ドメインモデルの育て方
増田 亨
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
A AOKI
20140301ハッカーズチャンプルー告知lt
20140301ハッカーズチャンプルー告知lt
Koichiro Nishijima
困らない程度のJDK入門
困らない程度のJDK入門
Yohei Oda
超先取りShenandoahGC
超先取りShenandoahGC
Yohei Oda
BtoCでバインド変数
BtoCでバインド変数
Yoshito Ueki
Viewers also liked
(8)
How to customize redmine public
How to customize redmine public
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove
ドメインモデルの育て方
ドメインモデルの育て方
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
「実践ドメイン駆動設計」社内読書会まとめ ~IDDD本難民に捧げる1章から7章~
20140301ハッカーズチャンプルー告知lt
20140301ハッカーズチャンプルー告知lt
困らない程度のJDK入門
困らない程度のJDK入門
超先取りShenandoahGC
超先取りShenandoahGC
BtoCでバインド変数
BtoCでバインド変数
Similar to 私がドメイン駆動設計をやる理由
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
dena_study
RDRA DDD Agile
RDRA DDD Agile
増田 亨
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
Ryo Mitoma
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
Kentaro Matsui
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
haljik Seiji
とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例
agileware_jp
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1
MinGeun Park
サーバーレスの今とこれから
サーバーレスの今とこれから
真吾 吉田
Kaleidox
Kaleidox
Tomoharu ASAMI
最近のWeb関連技術の動向あれこれ
最近のWeb関連技術の動向あれこれ
dsuke Takaoka
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
TIS Inc.
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
Rakuten Group, Inc.
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Yoshimura Soichiro
グリーにおけるスマホアプリ開発~HTML5編
グリーにおけるスマホアプリ開発~HTML5編
Mitsuhiro Tanda
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
DeNA
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
Tatsuya Ishikawa
【BS5】帰ってきたハードコアデバッギング ~.NET6 を添えて~
【BS5】帰ってきたハードコアデバッギング ~.NET6 を添えて~
日本マイクロソフト株式会社
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
Amazon Web Services Japan
20130202 ドメイン駆動設計読書会at名古屋のお誘い β
20130202 ドメイン駆動設計読書会at名古屋のお誘い β
Ryo RKTM
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
Masayuki Kanou
Similar to 私がドメイン駆動設計をやる理由
(20)
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
RDRA DDD Agile
RDRA DDD Agile
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1
サーバーレスの今とこれから
サーバーレスの今とこれから
Kaleidox
Kaleidox
最近のWeb関連技術の動向あれこれ
最近のWeb関連技術の動向あれこれ
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
グリーにおけるスマホアプリ開発~HTML5編
グリーにおけるスマホアプリ開発~HTML5編
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
【BS5】帰ってきたハードコアデバッギング ~.NET6 を添えて~
【BS5】帰ってきたハードコアデバッギング ~.NET6 を添えて~
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
20130202 ドメイン駆動設計読書会at名古屋のお誘い β
20130202 ドメイン駆動設計読書会at名古屋のお誘い β
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
More from 増田 亨
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
増田 亨
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
増田 亨
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
増田 亨
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
増田 亨
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
増田 亨
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
増田 亨
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
増田 亨
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
増田 亨
DDD sample code explained in Java
DDD sample code explained in Java
増田 亨
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
増田 亨
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
SoR 2.0 summary
SoR 2.0 summary
増田 亨
毎日が越境だ!
毎日が越境だ!
増田 亨
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
増田 亨
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
増田 亨
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
増田 亨
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
増田 亨
More from 増田 亨
(20)
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
DDD sample code explained in Java
DDD sample code explained in Java
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
SoR 2.0 summary
SoR 2.0 summary
毎日が越境だ!
毎日が越境だ!
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
私がドメイン駆動設計をやる理由
1.
私がドメイン駆動設計をやる理由 ギルドワークス 増田 2014年8月26日 DevLOVE 現場甲子園2014
東日本大会 「技」
2.
ソフトウェアの変更に 苦しんでいませんか? • どこに何が書いてあるか、わからない • ちょっとした変更なのに、あちこち修正が必要 •
副作用が怖くて、既存コードがいじれない …
3.
ドメイン駆動設計をがんばると ソフトウェアの変更コストが 劇的に下がる 変更コストが下がれば ソフトウェアの 成長の可能性が広がる
4.
before ドメイン駆動設計
5.
after ドメイン駆動設計
6.
ドメイン駆動設計 before - after これ以上なにもできないソフトウェア
成長力のあるソフトウェア
7.
ドメイン駆動設計のエッセンス • モデル駆動 • 三層+ドメインモデル •
チームをドメイン駆動に
8.
モデル駆動 現実世界 の関心事 モデル (模型) ソースコード 単純化 コードで 表現 動くソフトウェア
9.
モデル駆動 • 現実世界の「関心事の模型」をつくる – 単純化(要点と基本の構造) •
クラス図っぽい絵 • 言葉 – 会話(打合せ、雑談、…) – 文章(メール、wiki、issue、commit , … ) • 「関心事の模型」をコードで表現 – 動くソフトウェア – プログラミング言語/フレームワーク/実行環境とい う「制約」 • 改善を繰り返す
10.
改善を繰り返す 現実世界 の関心事 モデル (模型) ソースコード 単純化 コードで 表現 動くソフトウェア 一回では うまくいかない 一回では うまくいかない 動くソフトウェアで検証
11.
プロジェクト初日の関心事模型 • パッケージ図 顧客 商品 注文 出荷 売上・請 求・回収 値引き
返品 <<use>> ( = import 文) 関心事の基本構造 =プログラムの基本構造 参照関係の「複雑さ」や「あいまいさ」が、設計課題を暗示している ? ? ?
12.
三層+ドメインモデル • 業務視点でコードを整理する枠組み – このアーキテクチャに移行したのが、ドメイン駆動設計 実践のターニングポイントだった –
業務の関心事を「ドメインモデル」に集約する • 業務の関心事の構造をプログラムの構造に反映 – どこに何が書いてあるか「業務の関心事」の視点で、 コードを整理する – 変更の依頼があった時に、変更箇所が探しやすくなる – 業務的に関連しない箇所で、変更の副作用が起きな くなる
13.
三層アーキテクチャの問題 プレゼンテーション層 アプリケーション層 データソース層 OrderForm.vm OrderConfirm.vm OrderRegistered.vm @Controller class OrderEntryController … //
bind & validate @Service class OrderRegisterService … void register( Order order ) @Repository class OrderDatasource … void save( Order order ) 業務ロジックの断片が まぎれこみがち かつ その断片が複数画面に 重複しがち 複数の機能に 同じロジックが重複しがち 業務ロジックの断片が まぎれこみがち かつ 複数の機能や画面用に 同じコードを書きがち
14.
三層+ドメインモデル プレゼンテーション層 アプリケーション層 データソース層 OrderForm.vm OrderConfirm.vm OrderRegistered.vm @Controller class OrderEntryController … //
bind & validate @Service class OrderRegisterService … void register( Order order ) @Repository class OrderDatasource … void save( Order order ) ドメインモデル class Order class Items class ShipTo class BillingTo class ContactInfo … interface OrderRepository <<use>> import model.Order 業務ロジックの抽出と移動 矢印の意味
15.
ドメイン駆動設計にたどりつくまで • 大炎上プロジェクト • 分岐点 •
チームがドメイン駆動に変わっていく
16.
大炎上プロジェクト • バグだらけ – 変更画面は使用不可、レポート出力タイムアウト、他のユーザのデータ が丸見え、データ整合性チェックバッチ、… •
リファクタリングやりほうだい – いまより悪くなるわけない – 一か月くらい、毎日2回本番リリース • リファクタリングの効果絶大/面白いほどコード整理が進んだ – 名前の変更 – 説明用変数 – メソッドの抽出 – クラスの抽出 – ビューとモデルの分離 – モデルとデータベース操作の分離 …
17.
ドメイン駆動設計への分かれ道 • クラス構成やレイヤ構成で意見に違いがでてきた – 技術視点のコード整理 –
業務視点のコード整理 • 技術視点のコード整理 – ネタは盛りだくさん – 当時発展しつつあった、Webアプリケーションのフレー ムワークやツール導入の誘惑 • 業務視点のコード整理 – 障害は業務的なものばかり • テクニカルには正しく動くようになってきていた – 機能の追加・修正の要求は業務的なものばかり
18.
業務視点のコード整理 • 三層+ドメインモデルのアーキテクチャ – ターニングポイント –
業務の関心事構造=プログラムの構造 – 業務の用語を、パッケージ名/クラス名/メソッド 名/引数名/変数名に反映 • 業務視点のリファクタリング – 初期の設計よりも、継続的な設計改善がポイント • 改善する機会が多い • 累積効果も大きい
19.
チームがドメイン駆動に変わっていく • 業務視点でコードを整理する効果の実感 • 手続型からオブジェクト指向へ •
技術視点から業務視点へ
20.
業務視点でコードを整理する効果の実感 • 業務視点のリファクタリング – やり方と効果を実感できると、がらっと変わる –
障害対応や機能追加が絶好のチャンス – 変更の前に「必ずやるべき作業」として徹底する • 業務ロジックの重複記述を発見する – メソッドやクラスに抽出して重複をなくしておく • 他のレイヤの業務ロジックの断片を発見する – メソッドに抽出して、ドメインのクラスに移動しておく • 効果 – 変更すべき箇所を特定しやすい – 変更するコード量が減る – 変更の影響範囲がローカルになり、副作用の心配が減る – 自信を持って変更できる
21.
手続き型からオブジェクト指向へ • 最初は小学生ルール – メソッドやクラスの行数とか、引数の数とか –
「リファクタリング」の「いやな臭い」の勉強会 – 怪しい箇所/直すべき箇所の臭いがだんだんわかってくる • 設計改善の基本テクニックの習得 – メソッドの抽出 – ガード節と早期リターン – Value Object – ファーストクラスコレクション – 振る舞いを持った定数 – 「区分」ごとのサブクラス化 • 区分ごとのロジックをそれぞれ専用クラスに分ける • 「業務視点のリファクタリング」の徹底 – 業務ルール(加工、判断、計算)をメソッド化する – 業務用語のクラス化/パッケージ化 – 改善を繰り返す(放置すると劣化する)
22.
技術視点から業務視点へ • 語彙力 – 業務用語の「語彙」を増やす(使う機会を増やす) –
会話や文書で「業務用語」の正しい使い方を確認 – 似た用語の「使い分け」の練習 • ビジネス論理力 – 顧客の関心度の強弱を当てる練習 • Q&Aや状況説明などで、業務のいちばんの関心事(用語)を一番最初 に持ってくる練習 • whatとwhyの説明に業務の用語をちりばめる練習 • 断片化しあちこちにちらばった業務ロジックの発見ゲーム – ビュー – コントローラ – データベースアクセス • 技術者だけで話す時に、使う言葉が変わってきたら、本物
23.
チームがドメイン駆動に変わっていく • 業務視点でコードを整理する効果の実感 • 手続型からオブジェクト指向へ •
技術視点から業務視点へ
24.
ソフトウェアの変更に 苦しんでいませんか? • どこに何が書いてあるか、わからない • ちょっとした変更なのに、あちこち修正が必要 •
副作用が怖くて、既存コードがいじれない …
25.
ドメイン駆動設計があなたを救う これ以上なにもできないソフトウェア 成長力のあるソフトウェア
Download now