SlideShare a Scribd company logo
1 of 52
抽象的な教えを
試行錯誤しながら解釈した
DDD の実践レポート
ほげさん
2012 04 新卒入社 ど素人
1年くらい多重度をフランス語だと思ってた(→タジュード)
社会人歴の半分くらいは php でフロントエンド
後半の半分くらいは DDD をやっている
ここ1年くらいはテックリードみたいなことも
ScalaMatsuri とか Haskell Day に行ったりします
自己紹介
設計ぽいやつ
1. DDDをHaskellで考える 業務ロジックとシステムロジック
2. 副作用ってなんだ? 〜楽に小さく単体テストをしよう〜
チーム開発ぽいやつ
3. アジャイル / スクラム / チーム開発の[不吉な匂い]まとめ
4. GitHubを中心とした開発プロセス
予想に反していいねもらえたやつ
5. Pythonのimportについてまとめる
よく Qiita に投稿してます
1. https://qiita.com/suzuki-hoge/items/82229b903655ca4b5c9b
2. https://qiita.com/suzuki-hoge/items/bad43630ad1ad723ca4a
3. https://qiita.com/suzuki-hoge/items/16af349035a497e30063
4. https://qiita.com/suzuki-hoge/items/a6e3bdc2cc1cf4e98ea1
5. https://qiita.com/suzuki-hoge/items/f951d56290617df4279e
記事 URL
§1 導入
〜何を言ってるのかさっぱりわからん〜
ある日「レガシーシステムの大規模リニュー
アルのために DDD チームを立ち上げるんだ
けど、そこに入ってね」と言われる
お前は性格的に大丈夫だろとか言われて教育
は1日、お題を使った訓練は数日しかなかっ
た
何やらレビュー時に抽象的なフレーズが飛び交ってい
る
「業務をドメインで表すんだ」
「それの振る舞いはなに?」
「ドメインではメモリ上の更新だけ」
「ドメインを育てろ」
domain-driven design quickly やエヴァンス本の内容
が口伝を重ね、現場ではこう言う様になったんだろう
しかし!
初学者がこんな指示でものづくり出来るはず
がない
DDD ってのが何を言いたいのか、みんなが僕
に何をさせたいのか、全くわからない
それでもコードを書いてみたんだけど、「君の
Domain 層からは業務を感じない」とかわけわ
かんないこと言われた
辛いので「何を満たせば DDD だって認めてく
れるか、さっさと具体的に教えてくれ」って思
ってた
なので、今日は似たような「DDD よくわから
ん」って人に、失敗しながらたどりついた僕
なりの具体的な解釈を紹介してみたいと思い
ます
§2 単語の抽出 - 名詞を探せ?
〜ドメインに何もない〜
何から始めれば良いか全くわからん
やってみないことには進まないので、とりあ
えずみんながやってる名詞の抽出ってのをや
ってみよう
例題を用意して試してみます
アプローチ
メアドと年齢と住所とプランと
スマホ(任意)を選択して申し
込む
プランは 3GB(pv001) から
20GB(pv004) までを取り扱う
(pv001 は社内システムに登録する連携コードの
ようなもの)
未成年は申し込めない
本州以外は配送に+2日必要に
なる
名詞を探す
メアドと年齢と住所とプランと
スマホ(任意)を選択して申し
込む
プランは 3GB(pv001) から
20GB(pv004) までを取り扱う
(pv001 は社内システムに登録する連携コードの
ようなもの)
未成年は申し込めない
本州以外は配送に+2日必要に
なる
ピックアップ
絵にする
メアドと年齢と住所とプランと
スマホ(任意)を選択して申し
込む
プランは 3GB(pv001) から
20GB(pv004) までを取り扱う
(pv001 は社内システムに登録する連携コードの
ようなもの)
未成年は申し込めない
本州以外は配送に+2日必要に
なる
描く
ただのデータの箱になった
箱同士に線が引けない
何をすると何が起こるのか、この絵ではさっぱりわ
からない
+2日って話はどこ行っちゃったの?
コードの大半は Application 層と Infrastructure 層に
書くことになった(後述)
結果
「業務をドメインで表す」
→ ただのデータの箱になりましたけど…
「振る舞いを考える」
→ getter ならたくさんありますけど…
「ドメインではメモリ上の更新だけ」
→ ???
「ドメインを育てる」
→ ???
ここまでの理解と解釈
全然良さそうなやり方に見えない
とりあえず Domain 層がスカスカなのが悪い
んだろう
大事なものが何か考えて、ドメインに移して
みよう
次のアプローチ
§3 ドメインに集める?
〜集めすぎた〜
処理順とか条件分岐による DB 更新とか外部
システム連携が大事なもの(=ドメイン)だ
と思った
だって結合テストとかで細かく確認するのっ
てこの辺だもの
仮説
Application 層にあった条件分岐や DB 更新を移動
先ほどのドメインの周辺に存在した大量のコードを、
全部 申込ドメイン#申込()に移動した
変更
絵から読み取れない情報が多い…
実は…
線は数本あるけどあんまり情報が増えてない
リポジトリの引数が多くて雑多
Domain 層のテストコード書くのがものすご
く大変
DB のテストデータとかメーラのモックとか外部システム
のスタブとか全部揃えないといけない
結果
「業務をドメインで表す」
→ 更新処理や通信処理が全部集まったけど、辛い…
「振る舞いを考える」
→ 巨大な 申込() が1つだけならありますけど…
「ドメインではメモリ上の更新だけ」
→ ???
「ドメインを育てる」
→ ???
ここまでの理解と解釈
次のアプローチ
どうやら大事なもの(= ドメイン)は更新処理じゃあな
いみたいだ
申込() は変更処理をしているけど、変更結果を return で
もらえてないからテストがしづらいのではないか
そういう処理を直そう、目印は void だ、void をなくそう
return するものや処理名から見直した方が良さそうだ、
なら名詞じゃあなくて動詞を探した方が良さそう
§4 単語の抽出 - 動詞を探せ!
〜void の排除も〜
メアドと年齢と住所とプランと
スマホ(任意)を選択して申し
込む
プランは 3GB(pv001) から
20GB(pv004) までを取り扱う
(pv001 は社内システムに登録する連携コードの
ようなもの)
未成年は申し込めない
本州以外は配送に+2日必要に
なる
動詞を探す
メアドと年齢と住所とプランと
スマホ(任意)を選択して申し
込む
プランは 3GB(pv001) から
20GB(pv004) までを取り扱う
(pv001 は社内システムに登録する連携コードの
ようなもの)
未成年は申し込めない
本州以外は配送に+2日必要に
なる
ピックアップ
void を排除したいのでインパラ→「メソッド名」→アウトパラの形にする
メアドと年齢と住所とプランと
スマホ(任意)を選択して申し
込む
プランは 3GB(pv001) から
20GB(pv004) までを取り扱う
(pv001 は社内システムに登録する連携コードの
ようなもの)
未成年は申し込めない
本州以外は配送に+2日必要に
なる
メアドと年齢と住所とプ
ランとスマホ→「申し込
む」→???
未成年→「申し込めない
」→ ???
本州以外→「必要になる
」→ ???
まだ日本語で整理
まとめたり考えたり聞き出したりして、意地でも埋める
メアドと年齢と住所とプ
ランとスマホ→「申し込
む」→???
未成年→「申し込めない
」→ ???
本州以外→「必要になる
」→ ???
申込内容(メアドと年齢と住所とプ
ランとスマホ)→「申し込む」
→受付内容
未成年→「申し込めない」→
何らかのエラー
本州以外→「必要になる」→
配送予定日
受付内容→「送信する」→メ
ール
情報集め
やっと絵を考える
申込内容(メアドと年齢と住所とプ
ランとスマホ)→「申し込む」
→受付内容
未成年→「申し込めない」→
何らかのエラー
本州以外→「必要になる」→
配送予定日
受付内容→「送信する」→メ
ール
線があり、return している
最初と比べて随分と違う絵になった(詳細は割愛)
void を辞めるには return するクラスが必要だ、そ
のクラスは文書にある単語とは限らないっぽい
メソッドの整理はインパラ、アウトパラの整理も必
要とするのでドメインクラス同士が関係し出す
すごいテストコード書きやすい!
しかもテスト実行早い!
結果
「業務をドメインで表す」
→ ドメインクラスが何に依存して何を算出するか、その整
理のことっぽい
「振る舞いを考える」
→ ドメインクラスを算出するメソッド名のことっぽい
「ドメインではメモリ上の更新だけ」
→ Domain 層から処理順やデータアクセスを排除して上記
2つに集中しよう
「ドメインを育てる」
→ 文書には明記されていない単語がありそう
ここまでの理解と解釈
とは言え、void じゃあないもの全てがドメイ
ンなわけでもないだろう
ドメインか否かの境界があるはずだ
それに、広大な Domain 層を見ても隠れてい
る単語を見つけるなんて無理だろう
ドメインの中にも境界があるはずだ
次のアプローチ
§5 境界を決める
〜独立して育てる〜
1. Domain 層から Application 層や
Infrastructure 層への依存を断つ
2. ドメインが知る他のドメインを減らす
3. ドメイン間に線を引く時は、変更頻度が低
い方に向けて線を引く
やったこと
1. Domain 層が知っている外の都合があったので排除し
た
仕様は変わっていないのに
頻繁に修正するクラスがあるので気がついた
クラスを分ける
ドメインからエラーメッセージを
辿れなくなった
2. 知りすぎているドメインを切断した
テストコードで用意する変数が
異様に多いので気が付いた
引数を変えて import 文を減らす
メールからプランを辿れなくなったし、
プランが増えてもメールには関係ない
3. 変わりやすい方に依存している線を逆にした
配送業者の変更が多くて頻繁に supply を
修正していたので気がついた
依存性逆転の原則の適用
( dependency inversion principle )
supply → supplier の線が
supply ← supplier の線になった
1. Domain 層から Application 層や Infrastructure 層への依存
を断つ
→ ドメイン外の都合に振り回されない
2. ドメインが知る他のドメインを減らす
→ ドメインがコンパクトになる
3. ドメイン間に線を引く時は、変更頻度が低い方に向けて
線を引く
→ 修正箇所が減る
結果
やることが明確でコンパクトなドメインにな
り、考察がやりやすい
依存が少ないので、安心して変更出来る
結論
「業務をドメインで表す」
→ ドメインクラスが何に依存して何を算出するか、その整理の
ことっぽい
「振る舞いを考える」
→ ドメインを算出するメソッド名のことっぽい
「ドメインではメモリ上の更新だけ」
→ Domain 層から処理順やデータアクセスを排除して上記2つ
に集中しよう
「ドメインを育てる」
→ 文書には明記されていない単語がありそう、なので範囲を絞
っておくと考えやすいし変更しやすいってことだ
ここまでの理解と解釈
モデリング結果が ER 図になるってよくあると思うんだけ
ど、これも Domain 層 → Infrastructure 層の依存と本質は
同じだと思う
ドメインとテーブルは同じペースで育たないって考えると
理解するヒントになるかな、と思っている
例えばエディタでクラスの分割したあと、データ移行でテ
ーブルの分割もセットでしない
変更する頻度や理由が違うものは、分けておくと良さそう
理解(余談:モデルと ER 図)
§6 まとめ
「業務をドメインで表す」
→ ドメインクラスが何に依存して何を算出するか
「振る舞いを考える」
→ その算出のこと
「ドメインではメモリ上の更新だけ」
→ Domain 層から処理順やデータアクセスを排除して上記
2つに集中しよう
「ドメインを育てる」
→ 文書には明記されていない単語がありそう、なので範囲
を絞っておくと考えやすいし変更しやすい
再掲
今日は全く触れられなかったけど、ユビキタ
ス言語とか、他にも大事なことは沢山ある
そういう教えをちゃんと1つずつ噛み砕いて
実践できていることが、変化に対応できると
か高速に変更出来るって事に繋がるはず
くらいで捉えちゃって良いと思ってる
§7 今後やりたいこと
〜おまけ〜
エラー設計
別のパラダイムでの DDD
参照設計
設計時点でレイヤー毎に起きるエ
ラーを限定する
だって起きる理由もその後の対処
も違うから
特にシステムのエラーとビジネス
のエラーは絶対に分けたい
できるだけ型情報にして図示する
コンパイルチェックに頼る
エラー設計はこんな感じでできないかと妄想中
今の DDD の理解は
Haskell 経験からの思
いつきと独学でしかな
いので、ちゃんと学び
たい
ちょっとずつ読み進め
てる、新たな発見が待
ち遠しい
FP での DDD を試してみたい
https://www.amazon.co.jp/Domain-Modeling-Made-Functional-Domain-Driven-ebook/dp/B07B44BPFB
巨大 SQL は保守できないし Domain 層にならない
かといって更新と同じドメインクラスを無策に流用
すると、性能が悪いとか、変なドメインになったり
する
参照は更新と別で設計してみる様にし始めた
ドメインクラスに参照ルールをどの程度どうやって
書くか、性能とのトレードオフはどう考えるのか
参照って更新とは別な難しさがある
まだまだ色々迷ってる、疑問も尽きない
けど、冒頭で疑問だった「何を満たせば DDD
か教えろ」はいつのまにかどうでも良くなっ
てた
目的は「脱レガシー」なのだから

More Related Content

What's hot

ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】増田 亨
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)Takuya Kawabe
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8Koichiro Matsuoka
 
RDRA DDD Agile
RDRA DDD AgileRDRA DDD Agile
RDRA DDD Agile増田 亨
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由増田 亨
 
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)Koichiro Matsuoka
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう増田 亨
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?増田 亨
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門Yukei Wachi
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する増田 亨
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築Masashi Shinbara
 

What's hot (20)

ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 
RDRA DDD Agile
RDRA DDD AgileRDRA DDD Agile
RDRA DDD Agile
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由私がドメイン駆動設計をやる理由
私がドメイン駆動設計をやる理由
 
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 

Similar to 抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート

抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート 大阪
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート 大阪抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート 大阪
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート 大阪hogesuzuki
 
エンジニアがチームで数字を追って得たもの
エンジニアがチームで数字を追って得たものエンジニアがチームで数字を追って得たもの
エンジニアがチームで数字を追って得たものbasicinc_dev
 
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会Yu Shibatsuji
 
初めてのHadoopパッチ投稿 / How to Contribute to Hadoop (Cloudera World Tokyo 2014 LT講演資料)
初めてのHadoopパッチ投稿 / How to Contribute to Hadoop (Cloudera World Tokyo 2014 LT講演資料)初めてのHadoopパッチ投稿 / How to Contribute to Hadoop (Cloudera World Tokyo 2014 LT講演資料)
初めてのHadoopパッチ投稿 / How to Contribute to Hadoop (Cloudera World Tokyo 2014 LT講演資料)Hadoop / Spark Conference Japan
 
学び方を学ぶことを学ぶ
学び方を学ぶことを学ぶ学び方を学ぶことを学ぶ
学び方を学ぶことを学ぶHiroyuki Ito
 
three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現Kei Yagi
 
Trailheadでサクサク!新人研修
Trailheadでサクサク!新人研修Trailheadでサクサク!新人研修
Trailheadでサクサク!新人研修Satoru Ishikawa
 
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 SummerGoのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 SummerHirokazu Fukami
 

Similar to 抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート (11)

抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート 大阪
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート 大阪抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート 大阪
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート 大阪
 
DevOpsって何?
DevOpsって何?DevOpsって何?
DevOpsって何?
 
エンジニアがチームで数字を追って得たもの
エンジニアがチームで数字を追って得たものエンジニアがチームで数字を追って得たもの
エンジニアがチームで数字を追って得たもの
 
気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会気の合う人達と社外で社内勉強会
気の合う人達と社外で社内勉強会
 
初めてのHadoopパッチ投稿 / How to Contribute to Hadoop (Cloudera World Tokyo 2014 LT講演資料)
初めてのHadoopパッチ投稿 / How to Contribute to Hadoop (Cloudera World Tokyo 2014 LT講演資料)初めてのHadoopパッチ投稿 / How to Contribute to Hadoop (Cloudera World Tokyo 2014 LT講演資料)
初めてのHadoopパッチ投稿 / How to Contribute to Hadoop (Cloudera World Tokyo 2014 LT講演資料)
 
学び方を学ぶことを学ぶ
学び方を学ぶことを学ぶ学び方を学ぶことを学ぶ
学び方を学ぶことを学ぶ
 
three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現
 
Trailheadでサクサク!新人研修
Trailheadでサクサク!新人研修Trailheadでサクサク!新人研修
Trailheadでサクサク!新人研修
 
Caketest
CaketestCaketest
Caketest
 
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 SummerGoのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
 
Git github演習
Git github演習Git github演習
Git github演習
 

抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート

Editor's Notes

  1. 折角なので url をはっつけておきます、slideshare から見に行ってみてください ぜひいいねしてね!
  2. お題や解答例自体は本題ではないので軽く流します
  3. 多少 is未成年() とかはありますね あとは大体 getValue() があるのと、配送というよくわからない四角があります
  4. あと、リポジトリには手元の変数を全部そのまま渡してるだけ 実際はもっと膨大
  5. じゃあ次どうするか
  6. 今度は同じお題で動詞をハイライトします
  7. 名詞の時は絵を描きましたが、まだ日本語で整理します
  8. 絵は細かくなってしまったので詳細は割愛しますが、申込内容が受付内容(もしくはエラー)を return する様になってます
  9. この時点で自分の中では全部が一気に繋がり始めた気がします。 さらに次どうするか!
  10. ここからは今までと違って失敗ではなくてやったことをお話します
  11. 先ほどの動詞の抽出をして作った絵の、一部を抜粋してます 未成年は申し込めないという仕様は変わっていないのに、… ドメイン ”に” 向かって線を引いているので、ドメイン “から” エラーメッセージはわからなくなった -> エラーメッセージがどう変わろうと、ドメインには関係ない
  12. 聞き馴染みない方もいらっしゃるかも知れませんが、依存性逆転の原則というのを使いました
  13. 赤地の部分が差分です
  14. (時間次第) ビジネスエラー ユーザの操作によって起こる、応答する、冪等性がある システムエラー ユーザの操作は関係ない、中断する、冪等性がない
  15. なんでかって言うと、