Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「ドメイン」駆動で考える「ドメイン駆動設計」/consideration of domain-driven design via domain

philomagi
April 20, 2020

「ドメイン」駆動で考える「ドメイン駆動設計」/consideration of domain-driven design via domain

人と「ドメイン」がいかにして関わるのか、その関わり方を前提に、いかにして「ドメイン」をソフトウェアをという形で実現するのか。
そのための方法論を記述したものとして、「ドメイン駆動設計」を改めて再解釈・再理解してみる試み。

philomagi

April 20, 2020
Tweet

More Decks by philomagi

Other Decks in Technology

Transcript

  1. 発表者 @Philomagi • WEB系プログラマ ◦ ちょっと前までクライアントサイド主体 ◦ 最近はサーバーサイドメインになってきた • ScalaとTypescriptとRubyが好き

    ◦ Rubyは最近、公私共に若干疎遠 • PHPは中々縁が切れない悪友 ◦ 最近は、「然程悪いやつでもないな」と思い始めてる 2
  2. ドメイン駆動設計の定義 Eric Evans — Tackling Complexity in the Heart of

    Software(0:56~) • (「エヴァンスの言うDomain-Driven Designとは、要す るに何か?」とよく尋ねられることについて)定義する のは難しい • 一方で、ドメイン駆動設計のポイントあるいは原理に ついては、いくつか注目すべき事項は挙げてある (Youtube自動翻訳からの意訳、()内は発表者による) 7
  3. 形式化(言語化・モデル化)された知識と、背後の暗黙知 63 「Yの時は、Xはできません」 Y 例外 〜の時だけ 排他 Z A &

    B 月末 上限 無視 X 次期 暗黙知を直接知ることはできず、 形式化された範囲でしか知ることはできない
  4. Evansが書き添えた道具 88 • ドメインモデル ◦ ユーザー/開発者/ソフトウェアを検証可能な形で結合させる • ユビキタス言語 ◦ 厳密なモデルの記述を支える

    • 戦術的設計パターン ◦ ソフトウェアという形へ落とし込む方法を提供する ◦ 暗黙知の形式化を助ける • 戦略的設計パターン ◦ 大規模な構造を定義する方法を提供する ◦ 暗黙知の形式化を助ける
  5. ドメイン駆動のポイント・原理 Eric Evans — Tackling Complexity in the Heart of

    Software(01:30~) • ドメインの中核となる複雑さと契機に注目せよ • ソフトウェアエキスパートとドメインエキスパートのコラボ レーションの中で、モデルを探索せよ • モデルを明示的に表現するソフトウェアを記述せよ • 限られた文脈で、特定のユビキタス言語を使って発話せよ (Youtube自動翻訳からの意訳) 91
  6. コラボレーション 92 Eric Evans — Tackling Complexity in the Heart

    of Software(2:48~) 私達はその(business people, domain expert と呼ばれる)人に対して「そのビ ジネスを知っているのはあなたなのだから、(あなたが)モデルを提供してくださ い」と言っているわけではありません。 「私達はソフトウェアの責任者だからモデルを開発する」とも言いません。 「うまくやっていくためには、(domain expertとsoftware expertが)一緒にやって いく必要がある」と言っているのです。 (Youtube自動翻訳からの意訳、()内は発表者による)
  7. ユビキタス言語 93 Eric Evans — Tackling Complexity in the Heart

    of Software(3:52~) ソフトウェアはそのモデルを明示的に反映していなければならず、それがユビキ タス言語に繋がります。(中略) 最終的に、コラボレーション・探索 [exploration] ・プログラミングに至るまで全て の一連の筋道は、ドメインの課題をより正確かつ表現力豊かに語るための言語 (=ユビキタス言語)の進化を意味します。(中略) 「ユビキタス」とは、(会話やドキュメンテーションも含めた)”どこでも” [everywhere] という意味です。ただし、”システム全体のどこでも” という意味では ありません。ユビキタス言語は限定された文脈の内部にあると言わなくてはなり ません。 (Youtube自動翻訳からの意訳、[]内は自動翻訳の字幕、()内は発表者による)
  8. 参考資料(敬称略) 94 • エリック・エヴァンスのドメイン駆動設計 ◦ Eric Evans(著)今関 剛(監訳)和智 右桂、牧野 祐子(訳)

    • 暗黙知の次元 ◦ Michael Polanyi(著)高橋 勇夫(訳) • 境界の現象学 ◦ 河野 哲也 • 現象学 ◦ 木田 元 • 新装版 フッサールの現象学 ◦ Dan Zahavi(著) 工藤 和男、中村 拓也 (訳) • Eric Evans — Tackling Complexity in the Heart of Software ◦ https://www.youtube.com/watch?v=dnUFEg68ESM
  9. 参考資料(敬称略) 95 • [DDD]ドメイン駆動設計の定義についてEric Evansはなんと言っているのか ◦ by @little_hand_s ◦ https://qiita.com/little_hand_s/items/7288a0b3dd5dfb1a4c35

    • Eric Evans氏はドメイン駆動設計(DDD) は未完成だと述べた ◦ https://www.infoq.com/jp/news/2018/10/ddd-not-done/ • 意訳Domain-Driven Design ◦ by @hirodoragon ◦ https://speakerdeck.com/hirodragon112/yi-yi-domain-driven-design • 将太の寿司2 ◦ 寺沢 大介 • アジャイルサムライ 達人開発者への道 ◦ Jonathan Rasmusson(著)西村 直人、角谷 信太郎(訳)