【スペシフィケーションパターン】
Specificationパターン とは?
💡 ビジネスルールを組み合わせ自在なブロックに——条件を部品化してパズルのように組み立てる
📌 このページのポイント
ビジネスルールってif文で書いたらダメなの?
小さいうちはいいんだけど、ルールが増えると「プレミアム会員かつ購入歴90日以内かつ在庫ありの商品」みたいな条件がコードのいろんな場所に散らばってしまうんだよ。Specificationパターンはそれを解決するんだ。
どうやって解決するの?
AND/OR/NOTで組み合わせられるってどういうこと?
リポジトリパターンと一緒に使うことが多いの?
どんな時に特に効果があるの?
同じルールをバリデーション・クエリ絞り込み・ドメインロジックの3か所で使いたい場合にとくに効くよ。たとえば「有効なクーポン」の定義をひとつのSpecに集めておけば、画面表示・DB検索・適用判定すべてが同じSpecを参照できて、定義の変更が1か所で済むんだよ。
まとめ:ざっくりこれだけ覚えればOK!
「Specificationパターン」って出てきたら「ビジネスルールをオブジェクトに切り出してAND/ORで組み合わせる設計手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Specification Pattern」 = 仕様パターン
💬 EricEvansとMartinFowlerが2000年頃に提唱したドメイン駆動設計のパターンだよ。「仕様(Specification)」という名前は、条件を宣言的に記述するという考え方から来ているよ