【せきむくどうせっけい】

責務駆動設計 とは?

💡 誰が何の責任を持つか、役割分担で設計する術
📌 このページのポイント
責務駆動設計 ― CRCカードと責務の分担 注文 (Order) 責務: - 合計金額を計算する - 注文状態を管理する 協調: 商品, 顧客, 支払い 商品 (Product) 責務: - 価格を提供する - 在庫を確認する 協調: カテゴリ, 倉庫 支払い (Payment) 責務: - 決済を処理する - 領収書を発行する 協調: 注文, 決済サービス データ中心設計 「注文にはどんなデータがある?」 → データの入れ物として設計 ロジックが外に漏れやすい 責務中心設計 「注文は何ができるべき?」 → 役割と責任で設計 変更に強く保守しやすい
責務駆動設計のCRCカードと設計アプローチの比較
ひよこ ひよこ

責務駆動設計って、責務ってどういう意味?

ペンギン先生 ペンギン先生

責務は「そのオブジェクトが果たすべき役割と責任」のことだよ。たとえば会社でいうと「経理は財務管理をする」「営業は顧客対応をする」みたいに、誰が何を担当するかをはっきり決めることだね

ひよこ ひよこ

データじゃなくて役割で考えるの?

ペンギン先生 ペンギン先生

そうなんだ。たとえば「注文」クラスを作るとき、「注文データを持つ箱」と考えるんじゃなくて、「注文の合計を計算できる」「在庫を確認できる」という責務で考える。すると自然と良い設計になるんだよ

ひよこ ひよこ

CRCカードって何?

ペンギン先生 ペンギン先生

名刺サイズのカードに「クラス名」「責務」「協調するクラス」を書き出す手法だよ。ホワイトボードの前でカードを並べながらチームで議論すると、責務の偏りや抜け漏れが見えてくるんだ

ひよこ ひよこ

責務が偏るとどうなるの?

ペンギン先生 ペンギン先生

1つのクラスに責務が集中すると「神クラス」と呼ばれるアンチパターンになるよ。何でもできるけど、変更するたびにあちこち壊れる。責務を適切に分散させるのが、保守しやすいコードの秘訣なんだ

ひよこ ひよこ

他の設計手法とはどう使い分けるの?

ペンギン先生 ペンギン先生

ドメイン駆動設計が「業務の概念」を中心に考えるのに対して、責務駆動設計は「オブジェクト間の役割分担」にフォーカスする。実は両方を組み合わせて使うことも多くて、相互補完的な関係なんだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「責務駆動設計」って出てきたら「各部品の役割と責任をはっきり決めて設計する手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Responsibility-Driven Design」 = 責務駆動設計
💬 レベッカ・ワーフスブラックとアラン・マッキーンが提唱した設計手法だよ。「オブジェクトは何を知っていて、何ができるのか」を考えるのが出発点なんだ
← 用語集にもどる