Например, рассмотрим ситуацию расширения спректра услуг компании «Навигатор+». Будем считать, что судоходная компания начала заниматься пассажирскими перевозками. Для этого, реализуем точку устойчивости системы перевозимую сущность (Entity).
Проблема модификации системы наиболее актуальна в условиях динамически изменяющихся требований. Зачастую, удается выделить т.н. точки неустойчивости системы, которые наиболее часто будут подвержены изменению/модификации. Тогда, сущность шаблона устойчивый к изменениям заключается в устранении точек неустойчивости, путем определения их в качестве интерфейсов и реализации для них различных вариантов поведения.
Устойчивый к изменениям (Protected Variantions)
Примером хорошего дизайна системы может служить набор утилит GNU Binutils для Linux. В котором, каждая утилита (если ее рассматривать как модуль) выполняет лишь минимальные обязанности (высокое зацепление) и почти ничего не знает о природе других утилит (низкая связность), в связи с чем может быть легко заменена на аналог в некотором варианте использования.
Стоит отметить, что существуют методологии, согласно которым меры связности и зацепления можно оценить по шкале от 1 до 10 для конкретного случая. Однако, в рамках данной статьи они на рассматриваются.
Рассмотрим понятие меры связности модулей и меры зацепления модуля. Мера связности модулей определяется количеством информации которой располагает один модуль о природе другого. В свою очередь, мера зацепления модуля определяется степенью сфокусированности его обязанностей.
Пожалуй в любой литературе по объектно-ориентированному проектированию встречаются эти два понятия. Считается, что любая спроектированная система, должна удовлетворять принципам низкой связности и высокого зацепления модулей. Соответствие данным шаблонам позволяет легко модифицировать и сопровождать программный код а также повышает степень его повторного использования.
Низкая связанность (Low Coupling) и Высокое зацепление (High Cohesion)
Применение шаблона информационный эксперт повышает связность модулей и не противоречит свойству инкапсуляции.
В качестве примера можно рассмотреть подсчет общего количества груза и его стоимости как на определенном рейсе, так и обобщенно для всех рейсов компании.
Шаблон информационный эксперт является базовым и в то же время самым очевидным из девяти. Информационный эксперт описывает основополагающие принципы назначения обязанностей классам и объектам. Согласно описанию, информационным экспертом (объектом наделенным некоторыми обязанностями) является объект, обладающий максимумом информацией, необходимой для выполнения назначенных обязанностей.
Информационный эксперт (Information Expert)
Судоходная компания «Навигатор+» является крупнейшим поставщиком услуг морских грузоперевозок. Головной офис компании состоит из трех отделов: отдел по работе с клиентами, отдел диспетчеризации рейсов, отдел комплектации рейсов. Менеджеры из отдела по работе с клиентами оформляют договора на доставку груза из пункта А в пункт В. Диспетчеры из отдела диспетчеризации рейсов отслеживают положение судов. Администраторы из отдела комплектации рейсов формируют грузовые рейсы на основании договоров с клиентами.
Для более детального понимания читателем GRAPS шаблонов, будут описаны примеры их использования из предметной области морских грузоперевозок.
Предметная область
Рассмотрим характеристики основных GRASP шаблонов.
Известно девять GRAPS шаблонов, изначально описанных в книге «Применение UML и шаблонов проектирования». В отличие от привычных читателю паттернов из Банды Четырех, GRAPS паттерны не имеют выраженной структуры, четкой области применения и конкретной решаемой проблемы, а лишь представляют собой обобщенные подходы/рекомендации/принципы, используемые при проектировании дизайна системы.
GRASP (General Responsibility Assignment Software Patterns) шаблоны проектирования, используемые для решения общих задач по назначению обязанностей классам и объектам.
описание других паттернов.
Совершенный код / GRASP паттерны проектирования | Gliffer
Комментариев нет:
Отправить комментарий