前節ではシンプルな依存関係のRepositoryを見てきましたが、もっと複雑な依存関係を持っていることも多々あります。
flowchart LR
見積 --> 発注 --> 納品 --> 受領 --> 請求 --> 支払
上記は処理順を表現しています。
依存関係は処理順の逆になります。
flowchart RL
支払 --> 請求 --> 受領 --> 納品 --> 発注 --> 見積
見てもらえるとわかる通り、未来が過去に依存するようになっています。
このルールを守ってモデリングをしていきます。
classDiagram
direction LR
class quote{
UUID quote_id PK
timestamp created_at
}
class order{
UUID order_id PK
UUID quote_id FK
timestamp created_at
}
quote <|-- order
class supply{
UUID supply_id PK
UUID order_id FK
timestamp created_at
}
order <|-- supply
class accept{
UUID accept_id PK
UUID supply_id FK
timestamp created_at
}
supply <|-- accept
class billing{
UUID billing_id PK
UUID accept_id FK
timestamp created_at
}
accept <|-- billing
class payment{
UUID payment_id PK
UUID billing_id FK
timestamp created_at
}
billing <|-- payment
これにvalueテーブルを追加するとデータモデリングは終了です。
後はそれぞれのRepositoryを作ればokです。
<aside> 💡 今回は例として直前のidに依存する形でデータモデリングしましたが、恐らくorder_idを使いまわすのが適切でしょう。 ドメインモデルに出てこないidはヘルパーidとして定義しておきます。
</aside>
このように、idに焦点を当てると簡単にデータモデリングをすることができます。
idの単位でデータモデリングができるとRepositoryを作る単位もわかるので、ドメインモデリングに悩んだら一度データモデリングをしてみるのも手かもしれません。