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

ドメインモデルのつくり方 #5000dai

Akira Suenami
September 14, 2019

ドメインモデルのつくり方 #5000dai

仙台で行われたレッツゴーデベロッパーZERO ONEで登壇した資料です。

Akira Suenami

September 14, 2019
Tweet

More Decks by Akira Suenami

Other Decks in Technology

Transcript

  1. 自己紹介 • 末並 晃 @a_suenami • 生息している界隈: DDDとか、TDDとか、RDBとか • お仕事で使ってる技術スタック:

    Rails, React, 最近 Java とかも 少々 • 好きな RDBMS: PostgreSQL • 好きな制約: チェック制約 • 好きな焼肉の部位: ハラミ • 好きな(ry
  2. 後半戦への諸注意 • 今日は実際の業務におけるモデリングじゃないので、とりあえず 自分が興味のあるコンテキストで考えてもらってよいです。 ◦ たとえばコンテキストを絞れば、等価交換だったり、マッチング だったり、情報共有やコラボレーションだったりしますよね。 • すえなみチャンスというものも僕が勝手にやってるだけのものな ので、都合よく捉えてもらっても大丈夫です。

    ◦ 厳密にやりたいのであれば僕をドメインエキスパートと見なし ていただいてももちろん大丈夫です。 • というのが、後半戦なのでそれを念頭に話を聞いてもらいつつ、 ユビキタス言語になりそうな単語が思いついたらお手元の付箋に ガシガシ書いていってください。 ◦ 講演後にホワイトボードに貼って共有します。
  3. 本発表のモチベーション • 実装技術に依存しない形でドメインモデルとは何だったのかとい う解説をし、モデリングそのものの重要性を伝えたい。 ◦ DDD本は実装パターンも多く紹介されているが、本質はそこ でなく語彙の発見とモデルの構築プロセスだと考えているた め。 ◦ (実装技術の否定ではない。念のため。)

    • 事業の意思決定者(DDD本でいうドメインエキスパート)とどのよ うにコラボレーションしていくかについて議論を深めてみたい。 (注意)実装技術に非依存とは言うものの、基本的には DDD本でエリック・エヴァンス氏が推奨している通り、オブ ジェクトモデリングパラダイムは前提とし、その実装としてクラスベースオブジェクト指向の(パラダイムを持つ)プ ログラミング言語が選定されることを前提とする。
  4. 安定依存の原則 • “The dependencies between packages in a design should

    be in the direction of the stability of the packages. A package should only depend upon packages that are more stable that it is.” ◦ 「パッケージ間の依存関係の設計は、安定性のある方向に向 かわなければならない。パッケージはより安定したパッケージ に依存すべきだ。」 • ここでいう「安定性」は変更難易度のことを指すので極めて技術 的な概念と言えるが、エリック・エヴァンスが責務のレイヤーで いっている概念上のレイヤーもそのドメインにおいてより安定して いるもの・所与としているものへの依存と捉えられるのではない か。
  5. 判断条件の探し方 • いくつかの値を受け取り、次のアクション等の判断結果を返すも の • マニュアルオペレーションも含めてユビキタス言語になると好まし い。 ◦ キャンセル可否条件、申し込み受付可否条件 •

    意識を向けるとよい単語 ◦ 「条件」「〜の場合」 • 実装上は判断は特別な計算と捉えることもできる。 ◦ 計算の結果が真偽もしくは何らかの列挙型である場合、それ は判断であると考えられる。
  6. イベントと状態遷移の探し方 • あるイベントによって次にやるべきことが決定し、それを待つ、あ るいは次の誰かに通知するとき、そのイベントとその前後の状態 はユビキタス言語になるべきである。 ◦ 本人確認: 本人確認待ち → 本人確認済み

    ◦ 出荷指示: 在庫引当済み → 出荷待ち • 注意したほうがよい点 ◦ 元に戻すということはあり得るのか(誤操作など) ◦ ある特定の状態が特別な意味や文脈を持つ場合、別の語彙 とするか、コンテキスト境界の可能性を考える ▪ 例: 公開済み記事
  7. 依存の方向の検討 • 依存の方向は安定依存の原則と同様、変わりにくいものに依存 の方向を向けていくのがよい。 • 安定していると判断しやすいもの ◦ 事業上所与としているもの、たとえば安価に外部から仕入れ てこれるもの ◦

    社会通念上一般的な概念(通貨、時間・時刻、法で定められ ているもの、等) • 変わりやすいもの ◦ 競争優位性となる部分 ◦ 高速なPDCAを必要とするもの