2022/07/14 19:00-21:00 テクシバNo.7 社内LT資料
DDD(ドメイン駆動設計)を知らない人に知ったつもりさせる2023/07/14 19:00-21:00 テクシバVol.7ソフトバンク IT統括 ビジネスシステム開発本部 法人システム統括部 データシステム部 法人Webシステム課水上 皓登(きり丸)@nainaistar
View Slide
名前:水上 皓登(きり丸)twitter1 :nainaistartwitter2 :mizuHirotoGitHub :hirotoKirimaruブログ :きり丸の技術日記https://nainaistar.hatenablog.com/ 2ひとこと:DDD警察怖い2014-2019 :中小SIer2019- :ソフトバンク
DDDとは
DDDとはDomain-Driven Design(ドメイン駆動設計)のこと。エリック・エヴァンスが提唱した問題解決にフォーカスした設計パターン。内容自体は良書だが、表現が非常に回りくどいので読むのが大変。通称:エヴァンス本
DDDで大事なこと
DDDで大事なこと全員で同じ意味を持った単語でコミュニケーションを取ること。SB固有の共通のシステム名や単語もたくさん上の概念が理解出来たら、DDDは80%理解できています
何が難しいのか
何が難しいのか実装都合で誰も使っていない概念を使用してしまう。現実の概念だとN:Nの関係性を持つことが多いが、それだとシステムが作れないので、中間テーブル等々で1:Nの関係性にする必要があるその結果、会話をしていく中で齟齬が出てきてしまう
何が難しいのかまた、単数と複数で表現が異なったり、状態によって表現が異なることもある。概念自体があいまいかもしれない。プログラム上で表現するのは難しい。保護者、支払者、利用者、全部がUserクラス。
何が難しいのかプログラム化するときに、和製英語など英語と日本語の持つ意味が違うreceipt ←レシート? 領収書?invoice ←請求書? インボイス対応のための書類…?情報が欠落しがち。日本語で表現していることは、素直に日本語で表現した方がコードは読みやすい
何が難しいのかこの概念をコードに落とし込む難しい作業をどうやって解決したらよいか、という点がDDDの残り20%とはいえ、エヴァンスさんが当時考えたテクニック集でしかないので、本の通りに実装することがDDDではない
同じ単語で会話
同じ単語で会話コード上では、システムは共通で認識している単語として扱う機能ベースの命名にせず、システム名も併用した方がプロジェクト参加者には伝わる特に社内システムの場合、システム名を使った方が保守性は上がる。ただし、転職直後・開発だけ参加するメンバーが多い場合は、社内システムを理解する時間が多くなり、コストが見合わない可能性はある。
特化する
特化するユーザーといった表現ではなく、可能な限り特化することが必要特化すると、持つべき属性が見えてくる例:保護者 = 18才以上(成人) 支払者 = 口座情報等の支払手段がある 利用者 = 条件なしどういうロールで扱っているかを把握するとわかりやすくなる
大事な概念
大事な概念一番大事な概念が何かを掴む例:水上がソフトバンクで通話できる携帯を契約した● 契約者(水上)が一番大事?● 携帯が一番大事?● 携帯の電話番号が一番大事?● 通話できるサービスが一番大事?
大事な概念あくまで、システムの状況による前提で。● 契約者(水上)が一番大事?● 携帯が一番大事?● 携帯の電話番号が一番大事?● 通話できるサービスが一番大事?=> SMS認証できるし、電話番号が一番安定した概念
大事な概念電話番号が一番大事な概念である前提で、色んな機能が増えていく● 携帯を複数台持つ場合● 一括支払をする場合○ 本人だけでなく、家族も含めた支払■ 電話番号がベースだと人の関係性が簡単に取得できない慣れないと利便性が悪いシステムだと思ってしまうが、重要な概念を理解できると芋づる式に理解できる
脱線して素うどん理論
素うどん理論(リクルート ホールディングスCEO出木場 久征)引用:僕は一緒に働くチームのみんなに対して「まずは美味しい“素うどん”を作ろう」と話しています。もしうどん店を経営しているとして、売上や利益を上げるのはどうしたらいいかと考える時、商圏や客層に合わせて単価をいくらに設定しようとか、天ぷらを載せてみたらどうか、お得感のある定食メニューを作ってみてはどうかとテクニックに走ってしまいがちです。でも本当に大事なことは、やっぱり出汁が効いていて麺がめちゃくちゃ美味しい最高の素うどんを作れるかどうかだと思うんです。
素うどん理論次の二つを解決するための手段がDDD● 大事な概念の価値の最大化● 大事な概念の開発生産性を高める保守性、開発容易性にリーチした手法がDDD大事なのは、「おいしい素うどん」という概念を磨くこと
まとめ
1. 同じ意味の単語で会話する2. 会話で重要な概念に気づく3. 気づいた重要な概念を磨く4. 磨くうちに、違う捉え方ができるかも
Appendix
引用元素うどん理論https://recruit-holdings.com/ja/blog/post_20221108_0001/