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)
Чистая выдумка - это класс, который не представляет концепцию в проблемной области, специально создан для достижения низкой связанности, высокой когезии и возможности повторного использования (когда решение, представленное паттерном информационного эксперта, этого не делает). Этот вид класса называется "сервисом" в доменном дизайне.
Читайте также:
Комментарии
Отправить комментарий