GRASP

Общие паттерны распределения ответственностей (General Responsibility Assignment Software Patterns), сокращенно GRASP, состоят из руководящих принципов для распределения ответственности между классами и объектами в объектно-ориентированном проектировании. Они не связаны с принципами SOLID.

В GRASP используются различные паттерны и принципы: контроллер, создатель, посредник, информационный эксперт, высокое зацепление, низкая связанность, полиморфизм, устойчивость к изменениям и чистая выдумка. Все эти паттерны отвечают некоторым программным проблемам, и эти проблемы являются общими почти для каждого проекта разработки программного обеспечения. Эти методы были изобретены не для создания новых способов работы, а для лучшего документирования и стандартизации старых, испробованных и проверенных принципов программирования в объектно-ориентированном проектировании.

Ученый Крэйг Ларман утверждает, что "критический инструмент проектирования для разработки программного обеспечения - это ум, хорошо образованный в принципах проектирования. Это не UML или какая-либо другая технология". Таким образом, GRASP - это действительно интеллектуальный набор инструментов, учебное пособие, помогающее в разработке объектно-ориентированного программного обеспечения.

Паттерны

В объектно-ориентированном дизайне паттерн представляет собой именованное описание проблемы и решения, которое может быть применено к новым контекстам; в идеале, паттерн консультирует нас о том, как применить свое решение в различных обстоятельствах, и учитывает силы и компромиссы. Многие паттерны, учитывая конкретную категорию проблем, определяют распределение обязанностей между объектами.

Контроллер (Controller)

Паттерн контроллер назначает ответственность за обработку системных событий не-UI-классу, который представляет общую систему или сценарий варианта использования. Объект контроллера - это объект не пользовательского интерфейса, ответственный за получение или обработку системного события.

Контроллер варианта использования должен использоваться для обработки всех системных событий варианта использования и может использоваться для более чем одного варианта использования. Например, для сценариев использования "Создать пользователя" и "Удалить пользователя" можно использовать один класс с именем UserController вместо двух отдельных контроллеров вариантов использования.

Контроллер определяется как первый объект за уровнем пользовательского интерфейса, который получает и координирует ("контролирует") работу системы. Контроллер должен делегировать работу, которая должна быть сделана другим объектам; он координирует или контролирует деятельность. Он не должен делать много работы сам. Контроллер GRASP можно рассматривать как часть уровня приложения/службы (при условии, что приложение четко различает уровень приложения/службы и уровень домена) в объектно-ориентированной системе с общими уровнями в логической архитектуре информационной системы.

Создатель (Creator)

Создание объектов является одним из наиболее распространенных видов деятельности в объектно-ориентированной системе. Какой класс отвечает за создание объектов, является фундаментальным свойством отношений между объектами определенных классов.

Как правило, класс B должен отвечать за создание экземпляров класса A, если применяется одно или, предпочтительно, несколько из следующего:

  • Экземпляры B содержат или составно агрегируют экземпляры A
  • Экземпляры B записывают экземпляры A
  • Экземпляры B тесно используют экземпляры A
  • Экземпляры B имеют начальную информацию для экземпляров A и передают ее при создании.

Посредник (Indirection)

Паттерн посредник поддерживает низкий потенциал связанности (low coupling) и многократного использования между двумя элементами, назначая ответственность за посредничество между ними промежуточному объекту. Примером этого является введение компонента контроллера (controller) для передачи между данными (моделью, model) и их представлением (view) в паттерне Model-View-Controller (MVC). Это гарантирует, что связанность между ними остается низкой.

Информационный эксперт (Information expert)

Информационный эксперт (также эксперт или принцип эксперта) - это принцип, используемый для определения того, кому делегировать обязанности, такие как методы, вычисляемые поля и т. д.

Используя принцип информационного эксперта, общий подход к распределению обязанностей состоит в том, чтобы посмотреть на данную ответственность, определить информацию, необходимую для ее выполнения, а затем определить, где эта информация хранится.

Это приведет к возложению ответственности на класс с наибольшей информацией, необходимой для его выполнения.

Высокое зацепление (High cohesion)

Высокое зацепление - это оценочный паттерн, который пытается сохранять объекты соответствующим образом сфокусированными, управляемыми и понятными. Высокое зацепление обычно используется для поддержки низкой связанности. Высокое зацепление означает, что обязанности данного элемента тесно сцеплены и сфокусированы. Разбиение программ на классы и подсистемы является примером действий, которые увеличивают свойство сцепленности системы. Альтернативно, низкое зацепление - это ситуация, в которой данный элемент имеет слишком много несцепленных обязанностей. Элементы с низким зацеплением часто страдают от того, что их трудно понять, повторно использовать, поддерживать и изменять.

Низкая связанность (Low coupling)

Связанность (coupling) - это мера того, насколько сильно один элемент связан, знает или опирается на другие элементы. Низкая связанность является оценочной моделью, которая диктует, как распределить обязанности чтобы поддерживать

  • более низкую зависимость между классами,
  • изменения в одном классе, имеющие меньшее влияние на другие классы,
  • более высокий потенциал повторного использования.

Полиморфизм

Согласно принципу полиморфизма, ответственность за определение вариаций поведения на основе типа возлагается на тип, для которого это изменение происходит. Это достигается с помощью полиморфных операций. Пользователь типа должен использовать полиморфные операции вместо явного ветвления, основанного на типе.

Устойчивость к изменениям

Шаблон устойчивости к изменениям защищает элементы от изменений других элементов (объектов, систем, подсистем), оборачивая фокус нестабильности интерфейсом и используя полиморфизм для создания различных реализаций этого интерфейса.

Чистая выдумка (Pure fabrication)

Чистая выдумка - это класс, который не представляет концепцию в проблемной области, специально создан для достижения низкой связанности, высокой когезии и возможности повторного использования (когда решение, представленное паттерном информационного эксперта, этого не делает). Этот вид класса называется "сервисом" в доменном дизайне.


Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Нормальные формы, пример нормализации в базе данных

Хэш-таблица: разрешение коллизий