PassFront
  1. PassFront
  2. База знаний
  3. Смежные принципы проектирования

Какие шаблоны GRASP стоит знать?

Смежные принципы проектирования

GRASP (Крэг Ларман, «Применение UML и шаблонов проектирования») — девять шаблонов распределения ответственностей: они отвечают на вопрос «какому классу отдать этот метод».

Базовые

  • Information Expert — ответственность у того, у кого данные: Order.total() считает сам заказ, а не сервис, вытаскивающий строки.
  • Creator — B создаёт A, если содержит или агрегирует A, активно его использует или владеет данными для инициализации: Order создаёт OrderLine.
  • Controller — первый объект за UI, принимающий системное событие и делегирующий дальше, чтобы в UI не было логики.
  • Low Coupling и High Cohesion — оценочные критерии при выборе между вариантами.

Для вариативности

  • Polymorphism — варианты поведения по типу через полиморфные операции вместо switch.
  • Pure Fabrication — искусственный класс вне предметной области (OrderRepository), когда Expert дал бы плохое зацепление, например SQL внутри Order.
  • Indirection — посредник для развязки: адаптер, шина событий.
  • Protected Variations — стабильный интерфейс вокруг точек нестабильности; по сути обобщение OCP и DIP.

Как это спрашивают

Дают ситуацию: «Кто должен считать скидку?» Сильный ответ начинает с Expert, проверяет зацепление и при конфликте выбирает Pure Fabrication, например PricingService.

Коротко для собеседования

GRASP помогает решить, какому классу отдать ответственность: по умолчанию тому, у кого данные, с оглядкой на зацепление и связность. Если Expert тянет инфраструктуру в доменный класс, вводят Pure Fabrication вроде репозитория или сервиса.

Другие вопросы раздела