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

設計人材を育てるために DDD をどう使うべきか / How to use DDD to share design skills

設計人材を育てるために DDD をどう使うべきか / How to use DDD to share design skills

Toshishige Hagihara

May 11, 2019
Tweet

More Decks by Toshishige Hagihara

Other Decks in Technology

Transcript

  1. Copyright levii Inc. All rights reserved. 設計人材を育てるために DDD をどう使うべきか? 萩原利士成(@hagifoo)

    株式会社レヴィ CTO 2019/05/11 レガシーをぶっつぶせ。現場でDDD! #genbadeDDD
  2. Copyright levii Inc. All rights reserved. Balus Mega システム設計 コンサル

    システム思考 セミナー 複雑さの中に 価値がみつかる 顧客の 頭の中を 変える 顧客の 業務を 変える 顧客の ツールを 変える 23
  3. Copyright levii Inc. All rights reserved. “design” The art or

    action of conceiving of and producing a plan or drawing of something before it is made. https://en.oxforddictionaries.com/definition/design 41
  4. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード 利用者の 関心ごとを システムに 落としこむ ための 44
  5. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード 利用者の 関心ごとを システムに 落としこむ ための Art or Action 45
  6. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード FizzBuzz 表示させて for i in range(1, 101): if i % 15 == 0: print("FizzBuzz") elif i % 3 == 0: print("Fizz") elif i % 5 == 0: print("Buzz") else: print(i) 48
  7. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー サービス AI x 人材で 何かやろう 51
  8. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー 操作 シナリオ ペーパー プロト パッケージ サービス AI x 人材で 何かやろう 52
  9. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー 操作 シナリオ 画面 デザイン ペーパー プロト パッケージ サービス クラス AI x 人材で 何かやろう ドメインモデル 53
  10. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー 操作 シナリオ 画面 デザイン ペーパー プロト パッケージ サービス クラス AI x 人材で 何かやろう ドメインモデル 様々な抽象度で モデルが必要になる 54
  11. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー 操作 シナリオ 画面 デザイン ペーパー プロト パッケージ サービス クラス AI x 人材で 何かやろう ドメインモデル 実装上の制約がコン セプトレベルで影響 を与えたりすること もある = 下から上もある 55
  12. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード クラス ドメインモデル ドメインモデルが システムの外 (ユーザーの関心) と システムの中 (クラス設計) を繋ぐ 59
  13. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード クラス ドメインモデル 実装とも無理なく 繋がる & ドメイン層を 隔離できる 60
  14. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード 操作 シナリオ 画面 デザイン クラス ドメインモデル 価値 75
  15. Copyright levii Inc. All rights reserved. ドメインモデルを作って → 実装してみたら →

    新しいユースケースを見つけて → ドメインモデルを直して 80
  16. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード コンセプト カスタマー ジャーニー 操作 シナリオ 画面 デザイン ペーパー プロト パッケージ サービス クラス ドメインモデル 82
  17. Copyright levii Inc. All rights reserved. システムの外 システムの中 (ユーザー)インターフェース 抽象度:

    高 抽象度: 低 ソースコード 操作 シナリオ 画面 デザイン クラス ドメインモデル 97
  18. Copyright levii Inc. All rights reserved. 責務について質問して 自分の言葉で語ってもらう 師匠) アナウンスってど

    ういう責務持ってるんで すか? 師匠) アナウンスとリ リースノートってどうい う違いがあるの? 弟子) 自分の言葉で話す と徐々に理解が深まって いく感覚 99
  19. Copyright levii Inc. All rights reserved. 実装との対応関係や 実装ロードマップを議論 師匠) 最小限のコアな価

    値はなに? それにはどこが必要? 師匠) 既存のクラスとど う乖離してるの? どう近づけていこうか? 弟子) 実際のコードとの 対応や、どう変えていく かを意識できた 102
  20. Copyright levii Inc. All rights reserved. コードに落としてみる 弟子) モデルから実装に 落とすと少し詰まる

    師匠) モデルと実装が乖 離している箇所で指摘し 損ねた。。 103
  21. Copyright levii Inc. All rights reserved. • ドメインモデルの上で議論 • 別の視点との行き来

    • 継続的なコミュニケーション 当たり前だけど大事 空中戦にならない! 108
  22. Copyright levii Inc. All rights reserved. • ドメインモデルの上で議論 • 別の視点との行き来

    • 継続的なコミュニケーション それ管理者?ユーザー? 具体的な気づきが生まれる 109
  23. Copyright levii Inc. All rights reserved. • ドメインモデルの上で議論 • 別の視点との行き来

    • 継続的なコミュニケーション 問いかけ大事 結果だけでなくプロセスを共有 110
  24. Copyright levii Inc. All rights reserved. • 実装とドメインモデルの距離が遠い • 時間変化についての議論が漏れがち

    • ValueObject がうまく作れない。。 作り方や実装での使い方に まだ工夫の余地がありそう 113
  25. Copyright levii Inc. All rights reserved. • 実装とドメインモデルの距離が遠い • 時間変化についての議論が漏れがち

    • ValueObject がうまく作れない。。 どこから作っていくか? どう変えていくのか? 114
  26. Copyright levii Inc. All rights reserved. • 実装とドメインモデルの距離が遠い • 時間変化についての議論が漏れがち

    • ValueObject がうまく作れない。。 主に Python2 が原因? Python3 を使おうw 115
  27. Copyright levii Inc. All rights reserved. • 設計人材を育てるのに DDD よい

    • 当たり前を促すための問いかけ大事 • まだまだ工夫の余地はありそう 119