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

責務駆動設計 とは?

公開:
💡 誰が何の責任を持つか、役割分担で設計する術
📌 このページのポイント
責務駆動設計 ― CRCカードと責務の分担 注文 (Order) 責務: - 合計金額を計算する - 注文状態を管理する 協調: 商品, 顧客, 支払い 商品 (Product) 責務: - 価格を提供する - 在庫を確認する 協調: カテゴリ, 倉庫 支払い (Payment) 責務: - 決済を処理する - 領収書を発行する 協調: 注文, 決済サービス データ中心設計 「注文にはどんなデータがある?」 → データの入れ物として設計 ロジックが外に漏れやすい 責務中心設計 「注文は何ができるべき?」 → 役割と責任で設計 変更に強く保守しやすい
責務駆動設計のCRCカードと設計アプローチの比較
ひよこ ひよこ
責務駆動設計って、責務ってどういう意味?
ペンギン先生 ペンギン先生
責務は「そのオブジェクトが果たすべき役割と責任」のことだよ。たとえば会社でいうと「経理は財務管理をする」「営業は顧客対応をする」みたいに、誰が何を担当するかをはっきり決めることだね
ひよこ ひよこ
データじゃなくて役割で考えるの?
ペンギン先生 ペンギン先生
そうなんだ。たとえば「注文」クラスを作るとき、「注文データを持つ箱」と考えるんじゃなくて、「注文の合計を計算できる」「在庫を確認できる」という責務で考える。すると自然と良い設計になるんだよ
ひよこ ひよこ
CRCカードって何?
ペンギン先生 ペンギン先生
名刺サイズのカードに「クラス名」「責務」「協調するクラス」を書き出す手法だよ。ホワイトボードの前でカードを並べながらチームで議論すると、責務の偏りや抜け漏れが見えてくるんだ
ひよこ ひよこ
責務が偏るとどうなるの?
ペンギン先生 ペンギン先生
1つのクラスに責務が集中すると「神クラス」と呼ばれるアンチパターンになるよ。何でもできるけど、変更するたびにあちこち壊れる。責務を適切に分散させるのが、保守しやすいコードの秘訣なんだ
ひよこ ひよこ
他の設計手法とはどう使い分けるの?
ペンギン先生 ペンギン先生
ドメイン駆動設計が「業務の概念」を中心に考えるのに対して、責務駆動設計は「オブジェクト間の役割分担」にフォーカスする。実は両方を組み合わせて使うことも多くて、相互補完的な関係なんだよ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「責務駆動設計」って出てきたら「各部品の役割と責任をはっきり決めて設計する手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Responsibility-Driven Design」 = 責務駆動設計
💬 レベッカ・ワーフスブラックとアラン・マッキーンが提唱した設計手法だよ。「オブジェクトは何を知っていて、何ができるのか」を考えるのが出発点なんだ
← 用語集にもどる