Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

DDDとは

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

DDDで大事なこと

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

何が難しいのか

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

同じ単語で会話

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

特化する

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

大事な概念

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

脱線して 素うどん理論

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

まとめ

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Appendix

Slide 26

Slide 26 text

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