2020/01/10 DDDCJ DDD Talk MeetUp #3 @hirodragon112
意訳 Domain-Driven DesignA Happy New Year !!2020/01/10DDDCJ DDD Talk MeetUp #3@hirodragon112
View Slide
今日は「DDDってなんだっけ?」を改めて考えるきっかけになればと思っています
DDD ってご存じですか?
成瀬・允宣ヴァーン・ヴァーノンエリック・エバンス
Domain-Driven DesignDomain : 領域領域 = (システム化する) 対象領域
Domain-Driven DesignDriven : 駆動駆動 = 動力を与えて動かすこと。
Domain-Driven DesignDesign : 設計設計 =ある目的を具体化するためのもくろみ
Domain-Driven Design直訳を繋げるとドメインを動力として設計するとなるでしょうか。
いまいちよくわからない…
左下に船が海坊主いる?×印にお宝がよくわからないままだと同じ地図を見ても視点によって見えるものが変わる
よくわからないと人はこうなるDDDとは…-ユビキタス言語が大切!- 単なるOOP?- エバンスの日記?- 設計ではなくコミュニケーションの話し?- Repositoryって便利だね
今日はこの辺に切り込んだ話しをしてみたいと思います。
自己紹介株式会社ミライトデザイン CEO/Founder株式会社 Jocy CTO上流から下流までプロダクト作成に必要な事はだいたいやります。インフラ苦手です。勉強会・カンファレンスペチオブ (https://phper-oop.connpass.com/)OOC (https://ooc.dev/)を主催しております。Twitter : @hirodragon112
意訳Domain-Driven Design目次1. 意訳とは?2. DDDはどこまでいっても設計論3. 単一モデル4. HowとWhy5. その先の世界
意訳とは?原文の語句の一つ一つにこだわらず、全体の意味に重点をおいて訳すこと。
意訳とは?原文の語句の一つ一つにこだわらず、全体の意味に重点をおいて訳すこと。木を見ずに森を見よう
意訳とは?原文の語句の一つ一つにこだわらず、全体の意味に重点をおいて訳すこと。木を見ずに森を見ようつまり訳者が存在する。この資料で言えばhiroです
意訳とは?原文の語句の一つ一つにこだわらず、全体の意味に重点をおいて訳すこと。木を見ずに森を見ようつまり訳者が存在する。この資料で言えばhiroですこれが地図を見る時の視点となる
船で上陸できそうお宝は隣の島にありそう ×印にお宝が視点を加えると見えやすくなるお宝のありかを示す地図です
意訳とは?原文の語句の一つ一つにこだわらず、全体の意味に重点をおいて訳すこと。木を見ずに森を見ようつまり訳者が存在する。この資料で言えばhiroですDomainの表現に集中できるように考慮された設計手法
DDDはどこまでいっても設計論意訳の前にあえて一つ明言しておきます。
DDDはどこまでいっても設計論DDDはパターン集でもコミュニケーションの道具でも日記でもありませんもちろん設計者がドメインエキスパートになれというような事でもありません
設計論です
DDDはどこまでいっても設計論システム開発におけるリソースを一番コアであり重要であるドメインの表現に極力割きたいのです。ドメインをより正確に表現し、その他の要素の影響を気にすることなく集中して設計、実装をしたいのです。
DDDはどこまでいっても設計論これが意訳の前提を揃える説明でも書いた「Domainの表現に集中できるように考慮された設計手法」という事です。
DDDはどこまでいっても設計論ここからはこの視点を元に細かい語句にこだわらず、視点に重点を置いて意訳していきたいと思います。
意訳Domain-Driven Design目次1. 意訳とは?2. DDDはどこまでいっても設計論3. DDDの目的4. 単一モデルとレイヤー分割5. HowとWhy6. その先の世界
DDDの目的具体的にドメインに集中した設計を行うとは?
DDDの目的1. ドメインエキスパートとドメイン知識を分析する2. それをモデル化する3. 分析モデルをそのまま実装モデルにも使用する4. ドメインがアプリケーションの影響を受けない様にする5. 実装時に発見した考慮漏れを1に戻り反映するここに時間を使いたい
DDDの目的DDDとはたったこれだけの事を目指しているに過ぎません。簡単だね!明日からどんどんやりましょう!完
DDDの目的ちゃんと解説します
DDDの目的まず、そもそも我々の目的は何でしょうか?× DDDを導入する事〇 DDDを導入する事で解決できる課題の恩恵を得る
DDDの目的DDDが解決してくれる課題- ドメインに対する分析- 実装から分析へのフィードバック- このループの実現言い換えるとドメイン分析の精度を高め、分析結果をそのままシステムとして表現する事で最も複雑かつ重要なドメインを正確に表す質の高いソフトウェアを開発できるようになる
DDDの目的目指す世界ドメインエキスパート開発者システムモデル表現実装フィードバック知識共有発見整理フィードバック使用整理発見フィードバック
ドメインエキスパート開発者システム分析モデル実装モデル フィードバック分析モデルまでフィードバックし辛い反映よくある開発実装
ドメインエキスパート開発者システム分析モデル実装モデルここの問題を解決する必要があるよくある開発
ドメインエキスパート開発者システム単一モデルフィードバックフィードバックフィードバック単一モデル
単一モデル分析に使うモデルをそのまま実装に落とし込む
意訳Domain-Driven Design目次1. 意訳とは?2. DDDはどこまでいっても設計論3. 単一モデルとレイヤー分割4. HowとWhy5. その先の世界
HowとWhyDDD目的分析と実装を同じモデルを使用する方法論- ユビキタス言語で作成されたモデルを使用する- 境界コンテキストを分析する- Entity, ValueObject, Repository 等の戦術的パターンを使用する- レイヤードアーキテクチャにてドメインを隔離する
HowとWhy方法論は目的ではない
ドメインエキスパート 開発者システムシステムの中身がユビキタス言語でできたモデルのまま実装されているので理解できるユビキタス言語で作成した分析モデルをそのまま実装モデルとしてシステムに実装するユビキタス言語で作成した分析モデルをそのまま実装モデルとしてシステムに実装する重要単一モデル
HowとWhyだから我々は方法論を知る必要があるのです
その先の世界単一モデルを実現するには方法論を知る以外にも重要な事がある- 単一モデルの適応範囲は?- ドメインとアプリケーションの境界を知る- UIとドメインの境界を知るその辺はまた別の機会にお話しできればと思います。
その先の世界ご清聴ありがとうございました