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

DDD(ドメイン駆動設計)を知らない人に知ったつもりさせる/Introduce_DDD_to_unfamiliar_individuals

 DDD(ドメイン駆動設計)を知らない人に知ったつもりさせる/Introduce_DDD_to_unfamiliar_individuals

2022/07/14 19:00-21:00 テクシバNo.7
社内LT資料

kirimaru

July 18, 2023
Tweet

More Decks by kirimaru

Other Decks in Programming

Transcript

  1. DDD(ドメイン駆動設計)を
    知らない人に
    知ったつもりさせる
    2023/07/14 19:00-21:00 テクシバVol.7
    ソフトバンク IT統括 ビジネスシステム開発本部 法人システム統括部 データシステム部 法人Webシステム課
    水上 皓登(きり丸)@nainaistar

    View Slide

  2. 名前:水上 皓登(きり丸)
    twitter1 :nainaistar
    twitter2 :mizuHiroto
    GitHub :hirotoKirimaru
    ブログ :きり丸の技術日記
    https://nainaistar.hatenablog.com/ 2
    ひとこと:
    DDD警察怖い
    2014-2019 :中小SIer
    2019- :ソフトバンク

    View Slide

  3. DDDとは

    View Slide

  4. DDDとは
    Domain-Driven Design(ドメイン駆動設計)のこと。
    エリック・エヴァンスが提唱した
    問題解決にフォーカスした設計パターン。
    内容自体は良書だが、
    表現が非常に回りくどいので
    読むのが大変。
    通称:エヴァンス本

    View Slide

  5. DDDで大事なこと

    View Slide

  6. DDDで大事なこと
    全員で同じ意味を持った単語でコミュニケーションを取ること。
    SB固有の共通のシステム名や単語もたくさん
    上の概念が理解出来たら、DDDは80%理解できています

    View Slide

  7. 何が難しいのか

    View Slide

  8. 何が難しいのか
    実装都合で誰も使っていない概念を使用してしまう。
    現実の概念だとN:Nの関係性を持つことが多いが、
    それだとシステムが作れないので、中間テーブル等々で
    1:Nの関係性にする必要がある
    その結果、会話をしていく中で齟齬が出てきてしまう

    View Slide

  9. 何が難しいのか
    また、単数と複数で表現が異なったり、状態によって表現が異なることもある。
    概念自体があいまいかもしれない。
    プログラム上で表現するのは難しい。
    保護者、支払者、利用者、全部がUserクラス。

    View Slide

  10. 何が難しいのか
    プログラム化するときに、和製英語など英語と日本語の持つ意味が違う
    receipt ←レシート? 領収書?
    invoice ←請求書? インボイス対応のための書類…?
    情報が欠落しがち。
    日本語で表現していることは、素直に日本語で表現した方が
    コードは読みやすい

    View Slide

  11. 何が難しいのか
    この概念をコードに落とし込む難しい作業を
    どうやって解決したらよいか、
    という点がDDDの残り20%
    とはいえ、
    エヴァンスさんが当時考えたテクニック集でしかないので、
    本の通りに実装することがDDDではない

    View Slide

  12. 同じ単語で会話

    View Slide

  13. 同じ単語で会話
    コード上では、システムは共通で認識している単語として扱う
    機能ベースの命名にせず、システム名も併用した方がプロジェクト参加者には
    伝わる
    特に社内システムの場合、システム名を使った方が保守性は上がる。
    ただし、転職直後・開発だけ参加するメンバーが多い場合は、社内システムを
    理解する時間が多くなり、コストが見合わない可能性はある。

    View Slide

  14. 特化する

    View Slide

  15. 特化する
    ユーザーといった表現ではなく、可能な限り特化することが必要
    特化すると、持つべき属性が見えてくる
    例:保護者 = 18才以上(成人)
        支払者 = 口座情報等の支払手段がある
        利用者 = 条件なし
    どういうロールで扱っているかを把握するとわかりやすくなる

    View Slide

  16. 大事な概念

    View Slide

  17. 大事な概念
    一番大事な概念が何かを掴む
    例:水上がソフトバンクで通話できる携帯を契約した
    ● 契約者(水上)が一番大事?
    ● 携帯が一番大事?
    ● 携帯の電話番号が一番大事?
    ● 通話できるサービスが一番大事?

    View Slide

  18. 大事な概念
    あくまで、システムの状況による前提で。
    ● 契約者(水上)が一番大事?
    ● 携帯が一番大事?
    ● 携帯の電話番号が一番大事?
    ● 通話できるサービスが一番大事?
    => SMS認証できるし、電話番号が一番安定した概念

    View Slide

  19. 大事な概念
    電話番号が一番大事な概念である前提で、色んな機能が増えていく
    ● 携帯を複数台持つ場合
    ● 一括支払をする場合
    ○ 本人だけでなく、家族も含めた支払
    ■ 電話番号がベースだと人の関係性が簡単に取得できない
    慣れないと利便性が悪いシステムだと思ってしまうが、
    重要な概念を理解できると芋づる式に理解できる

    View Slide

  20. 脱線して
    素うどん理論

    View Slide

  21. 素うどん理論
    (リクルート ホールディングスCEO出木場 久征)
    引用:
    僕は一緒に働くチームのみんなに対して「まずは美味しい“素うどん”を作ろう」
    と話しています。もしうどん店を経営しているとして、売上や利益を上げるのは
    どうしたらいいかと考える時、商圏や客層に合わせて単価をいくらに設定しよう
    とか、天ぷらを載せてみたらどうか、お得感のある定食メニューを作ってみては
    どうかとテクニックに走ってしまいがちです。でも本当に大事なことは、やっぱり
    出汁が効いていて麺がめちゃくちゃ美味しい最高の素うどんを作れるかどうか
    だと思うんです。

    View Slide

  22. 素うどん理論
    次の二つを解決するための手段がDDD
    ● 大事な概念の価値の最大化
    ● 大事な概念の開発生産性を高める
    保守性、開発容易性にリーチした手法がDDD
    大事なのは、「おいしい素うどん」という概念を磨くこと

    View Slide

  23. まとめ

    View Slide

  24. 1. 同じ意味の単語で会話する
    2. 会話で重要な概念に気づく
    3. 気づいた重要な概念を磨く
    4. 磨くうちに、違う捉え方ができるかも

    View Slide

  25. Appendix

    View Slide

  26. 引用元
    素うどん理論
    https://recruit-holdings.com/ja/blog/post_20221108_0001/

    View Slide