Шаблоны проектирования не в программировании (часть 1)

Некоторое время назад, когда изучал паттерны GRASP, начал задумываться о том что эти же самые принципы я использовал и ранее, но для решения совсем других задач, в других областях.

Хочу поделиться опытом, рассмотрим применение паттернов на разных уровнях абстракции.

Увы, времени написать материал по всем сразу не хватает, поэтому буду добавлять по мере написания.

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

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

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

Объект с низкой степенью связанности (или слабым связыванием) не зависит от большого числа других элементов и имеет следующие свойства:

  • Низкая зависимость между классами (подсистемами).

  • Изменения в классе (подсистеме) слабо влияют на другие классы (подсистемы).

  • Высокая возможность переиспользования классов (подсистем).

Использование паттерна в программировании

Реализация классов таким образом, чтобы чтобы минимизировать знания внутри класса о других.

Пример.

Есть классы "A", "B", "C". Допустим, что класс "А" знает о классе "B", а класс "B" знает о классе "C". Значит, при необходимости доступа класса "А" к классу "С", для соблюдения принципа, класс "А" получает доступ к классу "C", через класс "B". В противном случае появляется дополнительная связь, между классами "А" и "C", которую можно избежать.

Шаблоны проектирования не в программировании (часть 1)

Использование паттерна в анализе

Моделирование объектов таким образом, чтобы избежать лишних взаимодействий.

Пример.

Есть несколько систем: Продаж, Логистическая, Складская. При появлении события о завершении продажи, из Системы продаж, информация о товарах, необходимых для формирования посылки поступает на Складскую систему. После формирования посылки, информация о заказе поступает со Складской системы в Логистическую.

Использование паттерна при формировании продукта

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

Недостатки

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

Пример.

Класс А содержит в себе информацию ранее содержащуюся только в классах Б и В.

Система продаж, начинает выполнять функции учёта товара на складе и оформление доставки с построением маршрутов для курьеров.

Продукт, становится мультифункциональным и сложным.

Для устранения недостатков, как правило, паттерн "Низкая связанность" применяется в паре с другим - "Высокое зацепление". О нём я расскажу во второй части.

Ссылка на сообщество:

Продолжение

Начать дискуссию