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

エヴァンス本輪読会お疲れ様会を楽しむために / DDD輪読会での差分とこれから

Jun Nakajima
August 28, 2021
89

エヴァンス本輪読会お疲れ様会を楽しむために / DDD輪読会での差分とこれから

エヴァンス本輪読会お疲れ様会でLTした内容です
https://ddd-community-jp.connpass.com/event/220962/

Jun Nakajima

August 28, 2021
Tweet

Transcript

  1. エヴァンス本輪読会

    お疲れ様会を楽しむために

    2021/08/28
    エヴァンス本輪読会お疲れ様会
    Jun Nakajima

    View Slide

  2. エヴァンス本輪読会

    お疲れ様でした!

    2

    View Slide

  3. そもそもなんでLT会?

    3

    View Slide

  4. そもそもなんでLT会?

    4

    View Slide

  5. LT会を開く動機

    ● みんなの学びを聴きたい、話したい

    ● いろんな立場の人が常時30〜40人で輪読会に参加していた

    ● 輪読会だけの時間では語れなかった何かが、それぞれある
    はず

    5

    View Slide

  6. 設計技術の暗黙知と形式知

    ● 設計の技術は(言語やFWと比べて)暗黙知が多い

    6
    暗黙知
    形式知
    形式知
    形式知
    それぞれ個人の経験

    世の中に出ている情報(書籍・ネットな
    ど)


    View Slide

  7. 設計技術の暗黙知と形式知

    ● 輪読会が目指していたもの

    7
    暗黙知
    形式知
    形式知
    形式知
    ①本の内容と経験を紐づけて話
    したり感想を言う

    ②言語化できたものを

    日常的に扱えるようになる

    形式知
    形式知
    形式知
    形式知
    形式

    View Slide

  8. ぜひ学んだことの言語化を

    ● LTでお話する登壇者はもちろんのこと、

    話を聴いた参加者の皆さんも、感想だったりフィードバックを
    してください

    ● 登壇者のさらなる言語化に繋がりますし、

    なにより自身の形式知にも繋がっていきます

    8

    View Slide

  9. 前置きはここまで

    9

    View Slide

  10. DDD輪読会での差分と

    これから

    2021/08/28
    エヴァンス本輪読会お疲れ様会
    Jun Nakajima

    View Slide

  11. 輪読会を行なう前後の

    自身の差分

    11

    View Slide

  12. 輪読会を行なう前

    ● IDDD本を読んでみたが、結局のところDDDって…?という状態

    ○ 現場はJavaじゃないし…(Pythonメインだった)

    ● 誰かがIDDD本読んだら、エヴァンス本でしょ! というノリで始まった(気がする)


    ● 現場ではモデリングもしなかったし、ドメインに沿った型を定義するということはし
    ていなかった

    ● 自身でコードに書いてたりはしたが、業務上複雑でもなかったので、導入するメ
    リットも薄かった

    12

    View Slide

  13. 輪読会を行った後

    ● あらためて読むと、第1部のモデルの話がすごく重要だと気づいた

    ○ 以前の自分は、読みやすさから第2部のテクニックを先に学んでた

    ○ モデルと実装を結びつける重要性

    ○ モデルのリファクタリングという観点は新しかった

    ● 第4部の責務のレイヤは、モデリングに一つ別の視点が加わった

    ○ ただ現状をモデリングしていると複雑すぎるので、現場ではモデリングする
    時に責務のレイヤを取り入れてみた

    13

    View Slide

  14. モデルと実装を結びつける

    14

    View Slide

  15. ソフトウェアシステムの一部を設計する際には、紐づけが明らかに
    なるように、ドメインモデルを文字通りの意味で忠実に反映させるこ
    と (中略)

    強固なユビキタス言語を支えることに加えて、ドメインと実装両方
    の目的に使える単一のモデルを要求すること

    15
    -- エリック・エヴァンスのドメイン駆動設計 P.47

    モデルと実装を結びつける


    View Slide

  16. モデルと実装を結びつける

    ● この結びつける感覚はなかなか難しかった

    ○ モデルを描いて満足していまい、その後参照しない

    ○ 日本語⇔英語変換の壁

    ■ 日本語でモデル描いて、実装は英語で結びつきがわ
    かりづらくなる

    ○ 設計と実装を分けてしまう(設計書作って、実装)

    ■ 設計と実装を行き来するアジャイル的アプローチ
 16

    View Slide

  17. モデルと実装を結びつける

    ● 第1〜2部では結びつける重要性と方法論を述べている

    ● モデルと実装を結びつけるにはアジャイル開発が前提

    ○ 設計と実装を同じチームでやる

    ● オブジェクト指向などのドメインのふるまいを表せるツールサ
    ポートが必要

    ○ コードでモデルが表現できないと、結びつけられない

    17

    View Slide

  18. モデルを常に

    リファクタリングし続ける

    18

    View Slide

  19. Ericの経験から導き出される教訓は、真に強力なドメ
    インモデルは時間と共に進化するということであり、
    偉大なベテランモデラであっても、最高のアイデアを
    得られるのはシステムが初期リリースされた後のこと
    だ

    19
    -- マーチン・ファウラー

    エリック・エヴァンスのドメイン駆動設計 P.xi 序文

    モデルは常にリファクタリングし続ける


    View Slide

  20. 忘れないで欲しいのだが、こうしたモデルに基づく設
    計は一度に現れるものではない。

    ドメインの重要な概念を蒸留して、シンプルで鋭いモ
    デルにするには、リファクタリングと知識のかみ砕き
    を何度か反復しなければならないのだ。

    20
    -- エリック・エヴァンスのドメイン駆動設計 P.55

    モデルは常にリファクタリングし続ける


    View Slide

  21. なぜモデルをリファクタリングするのか

    ● DDDは、的確なモデル(事業のコア)を見つけてそれをコード
    で表現できることが一つ目的としてある

    ○ 深いモデル

    ● 暗黙的な概念を明示したり、そのドメインにおいては周辺的
    な些末な情報を省いていったり

    21

    View Slide

  22. なぜモデルをリファクタリングするのか

    ● リファクタリングと一口で言っても、容易ではない

    ● 絶えずやっていかないといけな部分

    ● 今までの自分では、ただ現状をモデリングしていっただけ
    だったが、それを責務のレイヤなどを取り入れることで一つ
    整理をする観点を手に入れることができた

    22

    View Slide

  23. 今後の展望

    23

    View Slide

  24. ひたすら実践を続けていく

    ● 現場ではDDDを実践しているが、まだモデルへ常に行き来し
    ている状態ではない

    ○ それを促すようにしていきたい

    ● もっとモデルを忠実にコードに落とせるようにしていきたい

    ○ コードリーディング

    ○ 現場ベースでの相談だったり

    24

    View Slide

  25. Thank you!
    25

    View Slide