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

Learning Domain-Driven Design輪読会#2

kyotak
April 07, 2022
390

Learning Domain-Driven Design輪読会#2

kyotak

April 07, 2022
Tweet

Transcript

  1. Learning Domain-Driven Design 輪読会 #2 株式会社Showcase Gig 中島 清貴 (@ahyataro)

    #lddd_rindoku
  2. OverView Chapter 1. Analyzing Business Domains / ビジネスドメインの分析 • What

    Is a Business Domain? / ビジネスドメインとは? • What Is a Subdomain? / サブドメインとは? • Domain Analysis Examples / ドメイン分析例 • Who Are the Domain Experts? / ドメインエキスパートは誰? • Conclusion / 結論 • Exercises / エクササイズ
  3. Analyzing Business Domains / ビジネスドメインの分析 • 著者がDDDを教えるときに、受講者に「私たちはソフトウェアを書いているのであって、 ビジネスを運営しているわけではない。それでもビジネスドメインについて知る必要があ るのか?」とよく聞かれる。 •

    答えは「yes」である • 効果的なソリューションを設計・構築するためには、組織のビジネス戦略やソフトウェア を構築することによってどのような価値を生み出そうとしているのかを知る必要がある • この章では、企業のビジネスドメインを分析するためのドメイン駆動設計ツールについて 説明する。
  4. What Is a Business Domain? / ビジネスドメインとは? 「企業の主な活動領域を定義したもの」 • 企業は複数のビジネスドメインを持つことができる

    ◦ 例: AmazonはECやクラウドサービス事業をやっている • ビジネスドメインは頻繁に変更される可能性があることに注意 ◦ 例: Nokiaは木材加工やゴム製造をやっていたが、今は電気通 信、モバイル通信などをやっている
  5. What Is a Subdomain? / サブドメインとは? 「ビジネス活動のきめ細かい領域」 サブドメインは複数あり、単独では会社の成功には繋がらない 企業がその事業領域で競争するためには、サブドメイン同士が相互作用す る必要がある。

    サブドメインのタイプ • コアサブドメイン • 汎用サブドメイン • サポートサブドメイン
  6. Core subdomains / コアサブドメイン 「他社に対して競合優位性のあるサブドメイン」 例1: Uber • 新しい交通手段であるライドシェアリングを提供している •

    同じ方向に向かう乗客をマッチングさせコスト削減するといった、コアビジネ スの最適化を行い、競合優位性を維持している 例2: Google検索のランキングアルゴリズム • 優れた検索結果はトラフィックを促進し、広告プラットフォームにとって重要な 要素。 • Google検索自体は無料だが、Googleの事業の柱である広告プラットフォー ムに必要不可欠な存在であるため、コアサブドメインである
  7. Core subdomains / コアサブドメイン 複雑さ • 実装が簡単なコアサブドメインは、短期間の競争優位性しか提供しない • したがってコアサブドメインは複雑である •

    企業のコアビジネスには高い参入障壁があり、他社が模倣することは難しい 競争優位性の源泉 • コアサブドメインは必ずしも技術的なことではないということに注意 • 全てのビジネス上の問題がアルゴリズムや技術的ソリューションによって解決されるわけ ではなく、様々なソースからもたらされる • 例えば、宝石メーカーがオンライン販売をやっていたとしても、オンラインショップがコアサ ブドメインではなく、宝石のデザインこそがコアサブドメインである
  8. エヴァンス本ではコアドメインという単語があるが .... コアサブドメイン = コアドメイン LDDD本では、ビジネスドメインとの混合を避けたい、サブドメインのタイプは変化する ものであり表現を統一したい、という理由からコアサブドメインという表現を使っている

  9. Generic subdomains / 汎用サブドメイン 「全ての企業が同じ方法で実行しているビジネス活動」 • コアビジネスドメインと同様に、汎用サブドメインは複雑で実装が困難 • ただし競争優位性はない •

    革新や最適化は必要なく、きちんと実装されたものはどの企業でも広く利用可能であ る • 例えば認証認可の仕組みなどは汎用サブドメインに該当する ◦ 独自の仕組みを作るより、既存のソリューションを使用する方が理にかなってい る
  10. Supporting subdomains / サポートサブドメイン 「企業のビジネスをサポートするサブドメイン」 • 競争優位性を提供しない • ビジネスロジックがシンプルなもの •

    CRUD(create, read, update, delete)やETL(extract, transform, load)操作はサ ポートサブドメインに該当する
  11. Comparing Subdomains / サブドメインの比較 競争優位性と複雑さ

  12. Comparing Subdomains / サブドメインの比較 変動性 • コアサブドメイン ◦ 企業の競争優位性を維持するために、コアサブドメインを継続的に革新し、進化さ せる必要がある

    • 汎用サブドメイン ◦ 既存のソリューションがあるにも関わらず、時間の経過とともに変化する可能性が ある ▪ セキュリティパッチ、バグ修正、新たなソリューション • サポートサブドメイン ◦ 頻繁に変更されない
  13. Comparing Subdomains / サブドメインの比較 実装戦略 • コアサブドメイン ◦ 自社で実装する ◦

    自社で実装することで、長期的な保守や高速な変更をできるようにすべき ◦ 組織の中で最も熟練した人材をアサインする ◦ 頻繁かつ継続的に変更できるように最先端のエンジニアリング技術で実装する • 汎用サブドメイン ◦ 既存の製品を購入するか、オープンソリューションを採用する方が費用対効果は高い • サポートサブドメイン ◦ 社内で実装することを避けるのが妥当だが、汎用サブドメインとは異なり、既存のソリュー ションがないため、自社で実装する必要がある ◦ ある程度手抜き実装をしてもいい ◦ 有望な人材を育成する絶好の機会として捉えてもいい
  14. Comparing Subdomains / サブドメインの比較 まとめ

  15. Identifying Subdomain Boundaries / サブドメインの境界の特定 • ここまでの説明でサブドメインのタイプを特定することは設計上の意思決定に役立つの はわかった • では、どうやってサブドメインとその境界を特定すればいいのだろうか?

    • サブドメインのタイプは、会社のビジネスドメインと競合他社に対してどうやって差別化す るかによって定義される • 大多数のソフトウェアプロジェクトでは、何らかの形でサブドメインはすでに存在している • しかし、その境界を特定するのは難しく、 CEOに聞いてもわからないだろう • ドメイン分析を自分で実行してサブドメインを特定・分類する必要がある • 会社の部門やその他の組織単位が良い出発点である
  16. Identifying Subdomain Boundaries / サブドメインの境界の特定 サブドメインの蒸留 • 粒度の荒いサブドメインを出発点として、ドリルダウンしていき、より細かいサブドメインを洗い出す ◦ ビジネス機能の複雑さに隠れた重要な情報を見逃さないようにする

    • では、どこまで細かく探索すべきか?→次のページへ 顧客サービス部門の例。汎用サブドメイン だと思っていたものを細かく分析したところ、 コアサブドメインが見つかった
  17. Identifying Subdomain Boundaries / サブドメインの境界の特定 一貫性のあるユースケースとしてのサブドメイン • サブドメインは相互に関連する一貫性のあるユースケースのセットに似ている • 「一貫性のあるユースケースのセットとしてのサブドメイン」の定義完了を、サブドメインの探索の

    終了指針として使える クレジットカード支払いゲートウェイのユース ケース図。ユースケースは、データとアク ターによって密接に紐づいている。これら全 てのユースケースがクレジットカード支払い サブドメインを形成する。
  18. Identifying Subdomain Boundaries / サブドメインの境界の特定 • さらに掘り下げても、ソフトウェア設計上の決定に役立つ新しい洞察を得られなくなるところまで きたら、そこが探索を止める最適な場所である ◦ 例えば、サブドメインを掘り下げても、同じタイプしか出てこなかった場合など

    • コアサブドメイン、汎用サブドメイン、サポートサブドメインを発見することで、機能開発の焦点を 絞ることができる ◦ サブドメインのすべてが必要かどうか、考慮すべきである ◦ サブドメインを探すときは、ソフトウェアに関連するかしないかを認識し、開発しているシス テムに関連するビジネスにだけ焦点を当てることが重要
  19. Domain Analysis Example / ドメイン分析例 割愛

  20. Who Are the Domain Experts? / ドメインエキスパートは誰? • 要件を収集するアナリストでもなければ、システムを設計するエンジニアでもない •

    最初にビジネス上の問題を特定し、全てのビジネス知識の起源を持つ人 • 著者の経験則では、ドメインエキスパートは要件を思いつく人、またはソフトウェアのエンドユー ザである 「ビジネスドメイン知識の専門家」
  21. Conclusion / 結論 • コアサブドメイン ◦ 興味深い問題 ◦ 競合他社と異なる方法で実行している活動であり、そこから競合優位性を獲得している •

    汎用サブドメイン ◦ 全ての企業が同じようにやっていることで、すでに解決されている問題。 ◦ 既存のソリューションを使うことでコスト効率が高くなる • サポートサブドメイン ◦ 明白な解決策の問題 ◦ 社内で実施しなければならない可能性は高いが、競合優位性は提供しない
  22. Exercises / エクササイズ 1. 競合優位性を持たないサブドメインはどれでしょう? a. コアサブドメイン b. 汎用サブドメイン c.

    サポートサブドメイン d. b and c
  23. Exercises / エクササイズ 1. 競合優位性を持たないサブドメインはどれでしょう? a. コアサブドメイン b. 汎用サブドメイン c.

    サポートサブドメイン d. b and c
  24. Exercises / エクササイズ 2. 全ての競合他社が同じソリューションを使用できるサブドメインはどれでしょう? a. コアサブドメイン b. 汎用サブドメイン c.

    サポートサブドメイン d. いずれも該当しない
  25. Exercises / エクササイズ 2. 全ての競合他社が同じソリューションを使用できるサブドメインはどれでしょう? a. コアサブドメイン b. 汎用サブドメイン c.

    サポートサブドメイン d. いずれも該当しない
  26. Exercises / エクササイズ 3. どのサブドメインが最も頻繁に変更されるでしょう? a. コアサブドメイン b. 汎用サブドメイン c.

    サポートサブドメイン d. どのサブドメインも違いがない
  27. Exercises / エクササイズ 3. どのサブドメインが最も頻繁に変更されるでしょう? a. コアサブドメイン b. 汎用サブドメイン c.

    サポートサブドメイン d. どのサブドメインも違いがない
  28. Exercises / エクササイズ 4~7はWolfDeskを題材にした問題で、Chapter2以降にもエクササイズがあるので、 一通り読み終えた後にまとめて実施します