$30 off During Our Annual Pro Sale. View Details »

意訳Domain-Driven Design

hiro@miraito
January 10, 2020

意訳Domain-Driven Design

2020/01/10
DDDCJ DDD Talk MeetUp #3
@hirodragon112

hiro@miraito

January 10, 2020
Tweet

More Decks by hiro@miraito

Other Decks in Programming

Transcript

  1. 意訳 Domain-Driven Design
    A Happy New Year !!
    2020/01/10
    DDDCJ DDD Talk MeetUp #3
    @hirodragon112

    View Slide

  2. 今日は
    「DDDってなんだっけ?」
    を改めて考えるきっかけになればと思っています

    View Slide

  3. DDD ってご存じですか?

    View Slide

  4. 成瀬・允宣
    ヴァーン・ヴァーノン
    エリック・エバンス

    View Slide

  5. Domain-Driven Design
    Domain : 領域
    領域 = (システム化する) 対象領域

    View Slide

  6. Domain-Driven Design
    Driven : 駆動
    駆動 = 動力を与えて動かすこと。

    View Slide

  7. Domain-Driven Design
    Design : 設計
    設計 =ある目的を具体化するためのもくろみ

    View Slide

  8. Domain-Driven Design
    直訳を繋げると
    ドメインを動力として設計する
    となるでしょうか。

    View Slide

  9. いまいちよくわからない…

    View Slide

  10. 左下に船が
    海坊主いる?
    ×印にお宝が
    よくわからないままだと
    同じ地図を見ても視点によって見えるものが変わる

    View Slide

  11. よくわからないと人はこうなる
    DDDとは…
    -ユビキタス言語が大切!
    - 単なるOOP?
    - エバンスの日記?
    - 設計ではなくコミュニケーションの話し?
    - Repositoryって便利だね

    View Slide

  12. DDD ってご存じですか?

    View Slide

  13. 今日はこの辺に切り込んだ話しをしてみたいと思います。

    View Slide

  14. 自己紹介
    株式会社ミライトデザイン CEO/Founder
    株式会社 Jocy CTO
    上流から下流までプロダクト作成に必要な事はだいたいやりま
    す。
    インフラ苦手です。
    勉強会・カンファレンス
    ペチオブ (https://phper-oop.connpass.com/)
    OOC (https://ooc.dev/)
    を主催しております。
    Twitter : @hirodragon112

    View Slide

  15. 意訳Domain-Driven Design
    目次
    1. 意訳とは?
    2. DDDはどこまでいっても設計論
    3. 単一モデル
    4. HowとWhy
    5. その先の世界

    View Slide

  16. 意訳とは?
    原文の語句の一つ一つにこだわらず、
    全体の意味に重点をおいて訳すこと。

    View Slide

  17. 意訳とは?
    原文の語句の一つ一つにこだわらず、
    全体の意味に重点をおいて訳すこと。
    木を見ずに森を見よう

    View Slide

  18. 意訳とは?
    原文の語句の一つ一つにこだわらず、
    全体の意味に重点をおいて訳すこと。
    木を見ずに森を見よう
    つまり訳者が存在する。
    この資料で言えばhiroです

    View Slide

  19. 意訳とは?
    原文の語句の一つ一つにこだわらず、
    全体の意味に重点をおいて訳すこと。
    木を見ずに森を見よう
    つまり訳者が存在する。
    この資料で言えばhiroです
    これが地図を見る時の
    視点となる

    View Slide

  20. 船で上陸で
    きそう
    お宝は隣の島
    にありそう ×印にお宝が
    視点を加えると見えやすくなる
    お宝のありかを示す地図です

    View Slide

  21. 意訳とは?
    原文の語句の一つ一つにこだわらず、
    全体の意味に重点をおいて訳すこと。
    木を見ずに森を見よう
    つまり訳者が存在する。
    この資料で言えばhiroです
    Domainの表現に集中できるよう
    に考慮された設計手法

    View Slide

  22. 意訳Domain-Driven Design
    目次
    1. 意訳とは?
    2. DDDはどこまでいっても設計論
    3. 単一モデル
    4. HowとWhy
    5. その先の世界

    View Slide

  23. DDDはどこまでいっても設計論
    意訳の前にあえて一つ明言しておきます。

    View Slide

  24. DDDはどこまでいっても設計論
    DDDは
    パターン集でも
    コミュニケーションの道具でも
    日記でもありません
    もちろん設計者がドメインエキスパートになれというような事で
    もありません

    View Slide

  25. 設計論です

    View Slide

  26. DDDはどこまでいっても設計論
    システム開発におけるリソースを
    一番コアであり重要であるドメインの表現に極力割きたいのです。
    ドメインをより正確に表現し、その他の要素の影響を気にするこ
    となく集中して設計、実装をしたいのです。

    View Slide

  27. DDDはどこまでいっても設計論
    これが意訳の前提を揃える説明でも書いた
    「Domainの表現に集中できるように考慮された設計手法」
    という事です。

    View Slide

  28. DDDはどこまでいっても設計論
    ここからはこの視点を元に細かい語句にこだわらず、
    視点に重点を置いて意訳していきたいと思います。

    View Slide

  29. 意訳Domain-Driven Design
    目次
    1. 意訳とは?
    2. DDDはどこまでいっても設計論
    3. DDDの目的
    4. 単一モデルとレイヤー分割
    5. HowとWhy
    6. その先の世界

    View Slide

  30. DDDの目的
    具体的にドメインに集中した設計を行うとは?

    View Slide

  31. DDDの目的
    1. ドメインエキスパートとドメイン知識を分析する
    2. それをモデル化する
    3. 分析モデルをそのまま実装モデルにも使用する
    4. ドメインがアプリケーションの影響を受けない様にする
    5. 実装時に発見した考慮漏れを1に戻り反映する






    使



    View Slide

  32. DDDの目的
    DDDとはたったこれだけの事を目指しているに過ぎません。
    簡単だね!明日からどんどんやりましょう!

    View Slide

  33. DDDの目的
    ちゃんと解説します

    View Slide

  34. DDDの目的
    まず、そもそも我々の目的は何でしょうか?
    × DDDを導入する事
    〇 DDDを導入する事で解決できる課題の恩恵を得る

    View Slide

  35. DDDの目的
    DDDが解決してくれる課題
    - ドメインに対する分析
    - 実装から分析へのフィードバック
    - このループの実現
    言い換えると
    ドメイン分析の精度を高め、分析結果をそのままシステムとして
    表現する事で最も複雑かつ重要なドメインを正確に表す質の高い
    ソフトウェアを開発できるようになる

    View Slide

  36. DDDの目的
    目指す世界
    ドメインエキスパート
    開発者
    システム
    モデル
    表現
    実装
    フィードバック
    知識共有
    発見
    整理
    フィードバック
    使用
    整理
    発見
    フィードバック

    View Slide

  37. 意訳Domain-Driven Design
    目次
    1. 意訳とは?
    2. DDDはどこまでいっても設計論
    3. 単一モデル
    4. HowとWhy
    5. その先の世界

    View Slide

  38. ドメインエキスパート
    開発者
    システム
    分析モデル
    実装
    モデル フィードバック
    分析モデルまで
    フィードバックし辛い
    反映
    よくある開発
    実装

    View Slide

  39. ドメインエキスパート
    開発者
    システム
    分析モデル
    実装
    モデル
    ここの問題を解決する
    必要がある
    よくある開発

    View Slide

  40. ドメインエキスパート
    開発者
    システム
    単一
    モデル
    フィードバック
    フィードバック
    フィードバック
    単一モデル

    View Slide

  41. 単一モデル
    分析に使うモデルをそのまま実装に落とし込む

    View Slide

  42. 意訳Domain-Driven Design
    目次
    1. 意訳とは?
    2. DDDはどこまでいっても設計論
    3. 単一モデルとレイヤー分割
    4. HowとWhy
    5. その先の世界

    View Slide

  43. HowとWhy
    DDD目的
    分析と実装を同じモデルを使用する
    方法論
    - ユビキタス言語で作成されたモデルを使用する
    - 境界コンテキストを分析する
    - Entity, ValueObject, Repository 等の戦術的パターンを使用す

    - レイヤードアーキテクチャにてドメインを隔離する

    View Slide

  44. HowとWhy
    方法論は目的ではない

    View Slide

  45. ドメインエキスパート 開発者
    システム
    システムの中身がユビキタス言語でできた
    モデルのまま実装されているので理解できる
    ユビキタス言語で作成した分析モデルを
    そのまま実装モデルとしてシステムに実装する
    ユビキタス言語で作成した分析モデルを
    そのまま実装モデルとしてシステムに実装する
    重要
    単一
    モデル

    View Slide

  46. HowとWhy
    だから我々は方法論を知る必要があるのです

    View Slide

  47. 意訳Domain-Driven Design
    目次
    1. 意訳とは?
    2. DDDはどこまでいっても設計論
    3. 単一モデルとレイヤー分割
    4. HowとWhy
    5. その先の世界

    View Slide

  48. その先の世界
    単一モデルを実現するには方法論を知る以外にも重要な事がある
    - 単一モデルの適応範囲は?
    - ドメインとアプリケーションの境界を知る
    - UIとドメインの境界を知る
    その辺はまた別の機会にお話しできればと思います。

    View Slide

  49. その先の世界
    ご清聴ありがとうございました

    View Slide