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

駆け⾜で学ぶドメイン駆動設計

 駆け⾜で学ぶドメイン駆動設計

ドメイン駆動設計

comucal
PRO

March 28, 2023
Tweet

More Decks by comucal

Other Decks in Technology

Transcript

  1. ©2020 Fullstream Solutions, Inc.
    駆け⾜で学ぶドメイン駆動設計
    2023/3/28
    (株)フルストリームソリューションズ 和智右桂
    Engineer study night vol.1

    View Slide

  2. ©2020 Fullstream Solutions, Inc.
    ⾃⼰紹介
    ◆和智右桂
    l 株式会社フルストリームソリューションズ 代表取締役社⻑
    l ⾷品会社(東証STD) 外部CTO
    l 翔泳社主催 CodeZine Academy講師
    l (⼀財)⽣涯学習開発財団 認定プロフェッショナルコーチ
    ◆経歴
    l 複数の上場企業にて、フロントシステム/基幹システムのリ
    プレイスのプロジェクトマネージャーを経験する他、IT戦略
    ⽴案、DX推進⽀援を実施。
    l 上場企業を含む企業の経営者やスタートアップの代表、製薬
    会社シニアマネージャーへのエグゼクティブコーチングを実
    施。
    l ソフトウェア開発に関する翻訳書を数多く出版
    • 『エリック・エヴァンスのドメイン駆動設計』Eric Evans(著)、翔泳社(2017
    )和智右桂(翻訳)[共訳]
    • 『リーダーの作法―ささいなことをていねいに』Michael Lopp(著)、和智右
    桂(翻訳)、オライリージャパン(2022)
    1

    View Slide

  3. ©2020 Fullstream Solutions Inc.
    υϝΠϯۦಈઃܭ
    ςʔϚ

    View Slide

  4. ©2020 Fullstream Solutions Inc.
    今⽇のゴール 3
    ドメイン駆動設計が何に役立つのかを理解する
    この先DDDについて学ぶとっかかりを作る

    View Slide

  5. ©2020 Fullstream Solutions Inc.
    課題設定①
    ◆ソフトウェアの品質には2種類ある
    l外部品質
    • ユーザーから⾒たソフトウェアの品質。
    • ユーザーが使いやすく、信頼性が⾼く、安全であることが求められる。
    l内部品質
    • 開発者や保守者から⾒たときの品質。
    • 内部品質が⾼いと、コードの理解や保守がしやすくなり、拡張性などが
    向上する。
    4
    作ったソフトウェアを
    2度と触らないなら、
    しっかりテストしてきちんと
    動きさえすればいい
    実際には、機能追加・改修を
    重ねながら⻑い期間付き合う
    ことになる

    View Slide

  6. ©2020 Fullstream Solutions Inc.
    課題設定②
    ◆保守と拡張を容易にするためのポイントは?
    l部品が適切な粒度で作られていること
    5

    View Slide

  7. ©2020 Fullstream Solutions Inc.
    課題設定③
    ◆つまり⼤切なのはコンポーネント化
    lコンポーネントとは
    • 独⽴して動作する部品のこと。再利⽤可能な部品単位に分割し、独⾃の
    インターフェースを備えていることが特徴。
    • ⼀つのコンポーネントが⼀つの機能を担当する。
    lコンポーネント化のメリット
    • 再利⽤性や保守性の向上、開発効率の向上など。
    • 再利⽤性が⾼いため、同じ機能を複数回実装する必要がなくなる。
    • コンポーネントは独⽴しているため、修正や拡張が容易に⾏えるように
    なる。
    6

    View Slide

  8. ©2020 Fullstream Solutions Inc.
    7
    ίϯϙʔωϯτΛઃܭ͢Δࡍʹ͸
    ۀ຿஌ࣝΛ൓өͤ͞·͠ΐ͏
    ほぼ今⽇の結論

    View Slide

  9. ©2020 Fullstream Solutions Inc.
    8
    Կ͕͏Ε͍͠ͷʁ

    View Slide

  10. ©2020 Fullstream Solutions Inc.
    9
    ίϯϙʔωϯτΛ
    ۀ຿஌ࣝʹ߹Θ͓͚ͤͯ͹
    ۀ຿ͷมߋʹରͯ͠
    ॊೈʹ௥ਵͰ͖ΔΑ͏ʹͳΓ·͢

    View Slide

  11. ©2020 Fullstream Solutions Inc.
    業務知識に合っていないと起きること 10
    ◆業務の変更箇所がソフトウェアの変更箇所と整合せ
    ず、「ちょっとした変更」が予想以上に広範囲に影響
    を与えてしまう。
    業務知識 ソフトウェア構成
    ここを変更
    ここを変更

    View Slide

  12. ©2020 Fullstream Solutions Inc.
    11
    Ͳ͏͢Ε͹͍͍ͷʁ

    View Slide

  13. ©2020 Fullstream Solutions Inc.
    12
    「モデル」について
    理解しよう

    View Slide

  14. ©2020 Fullstream Solutions Inc.
    13
    ʜϞσϧʁ

    View Slide

  15. ©2020 Fullstream Solutions Inc.
    「モデル」について理解することは
    DDDを読み進めるうえで
    最重要
    14

    View Slide

  16. ©2020 Fullstream Solutions Inc.
    15
    ϙΠϯτ
    物事について人が考えることは
    それぞれ意外と異なっている

    View Slide

  17. ©2020 Fullstream Solutions Inc.
    16
    υϝΠϯϞσϧʢୈষʣ
    選び抜かれてシンプルにされ、
    意図を持って組み⽴てられた
    知識の表現形式
    ある業務に詳しい⼈は、その業務について、
    適度に抽象化された体系的な知識を
    頭の中に描いているもの

    View Slide

  18. ©2020 Fullstream Solutions Inc.
    17
    業務知識がどういう要素で構成され
    それぞれがどう関係しているのか
    ϙΠϯτ

    View Slide

  19. ©2020 Fullstream Solutions Inc.
    18
    会話内容の抽象度を把握し、
    登場する構成要素を分解する技術は
    AIとの対話においてもかなり有効
    ༨ஊ

    View Slide

  20. ©2020 Fullstream Solutions Inc.
    19
    忘れてはいけない
    コンポーネントの抽象度

    View Slide

  21. ©2020 Fullstream Solutions Inc.
    コンポーネントには様々な抽象度がある
    ◆サブシステム
    l⼤規模システムにおいては、複数のサブシステムがお互いに連携
    しあって⼀つの⼤きなシステムを作り上げる。
    ◆アプリケーションコンポーネント
    lアプリケーションの中で様々な機能から再利⽤される部品
    • 認証認可/決済 etc
    ◆パッケージ
    lアプリケーションの機能やレイヤごとにソースコードをパッケー
    ジ化したもの
    ◆クラス/メソッド
    lソースコードレベルの部品単位
    20

    View Slide

  22. ©2020 Fullstream Solutions Inc.
    21
    各抽象度において
    適切な業務理解を反映させて
    コンポーネント化を行う必要がある
    ϙΠϯτ

    View Slide

  23. ©2020 Fullstream Solutions Inc.
    22
    ϙΠϯτ
    コンポーネントの単位と同様、
    その関係性も重要
    第4部「戦略的設計」
    のテーマ

    View Slide

  24. ©2020 Fullstream Solutions Inc.
    23
    ڥք͚ͮΒΕͨίϯςΩετʢୈষʣ
    モデルが適⽤されるコンテキストを
    明⽰的に定義し、その境界内では、
    モデルの⼀貫性を保とう。

    View Slide

  25. ©2020 Fullstream Solutions Inc.
    24
    ෗ഊ๷ࢭ૚ʢୈষʣ
    管理外の他システムと統合する際には、
    その不安定さを吸収するレイヤを設けて、
    ⾃システムを腐敗から守ろう
    変更をコントロールできない他システムとの
    インターフェイスは、本体に影響を与えずに
    変更できるようにしておこう、ということ

    View Slide

  26. ©2020 Fullstream Solutions Inc.
    25
    ίϯϙʔωϯτΛઃܭ͢Δࡍʹ͸
    ۀ຿஌ࣝΛ൓өͤ͞·͠ΐ͏

    View Slide

  27. ©2020 Fullstream Solutions Inc.
    26
    26
    会社概要
    ◆株式会社フルストリームソリューションズ
    l FullstreamSolutions, Incorporated.
    l 設⽴:2020年12⽉15⽇
    l 資本⾦:6,000,000円
    l 所在地:東京都新宿区⻄新宿1-26-2
    新宿野村ビル48階
    l 代表取締役社⻑:和智 右桂
    l e-mail:[email protected]
    l url:http://www.fullstream-solutions.co.jp
    ◆コンセプト
    お客様の新しい環境に対応する社内の変⾰を成功させるため、
    お客様の価値観・⽂化を尊重しつつ、⾜りない役割を補うことによって、
    戦略⽴案/企画から運⽤に⾄るまで、⼀連の流れをご⽀援します。
    フルストリーム

    View Slide

  28. ©2020 Fullstream Solutions Inc.
    27
    27
    ◆DDD Boot Camp(Private Edition)
    l ドメイン駆動設計について、実践に活かせる知識を⾝につけるために、座学とワークショップを組み合
    わせて学ぶ、1⽇のワークショップです。ご希望される企業様向けにカスタマイズして提供します。
    ◆DDD/MSA講座
    l ドメイン駆動設計とマイクロサービスアーキテクチャについて学ぶ2⽇間(4時間×2)の研修プログ
    ラムです。
    l グロース・アーキテクチャ&チームス株式会社(Graat )と提携して提供しています。
    ◆サービスデザインとドメイン駆動設計によるアーキテクチャ設計
    l サービスブループリントの作成からシステムの内部構成の設計、ER図の作成、APIの設計までを学ぶ、
    6⽇間(4時間×6)の研修プログラムです。
    l グロース・アーキテクチャ&チームス株式会社(Graat )と提携して提供しています
    ◆ディスカッション・トレーニング
    l ⾃分と相⼿の考えを擦り合わせて最適解を導き出す訓練を、カードゲームを使って⾏う2回(2時間×2
    )のトレーニングです。
    研修プログラムのご紹介
    その他オフラインでのコンサルティングサービスも提供しています。お気軽にお問い合わせください。

    View Slide

  29. ©2020 Fullstream Solutions Inc.
    CONFIDENTIAL
    l 本⽂書は、株式会社フルストリームソリューションズが著作権その他の権利を有する営業秘密(含サプライヤー等第三者が権利を有するもの)です。
    l 当社の許可なく複製し利⽤すること、また漏洩することは「著作権法」「不正競争防⽌法」によって禁じられております。
    l 本資料内の社名・製品名は各社の登録商標です。
    ご清聴ありがとうございました

    View Slide