Веб-сервисы, Оркестровка и хореография, Программирование, Сервис-ориентированные системы

Сильное и слабое связывание в программировании

Существует несколько технологических подходов к решению задач интеграции и поддержки унаследованных систем. Все эти подходы, на наш взгляд, являются последовательными эволюционными этапами по пути общего развития информационных технологий и устранения своих внутренних недостатков. Так, многие авторы выделяют основное свойство интеграционных решений, развитие которого обуславливает по большей мере и развитие подходов к интеграции, – связывание. Сильное и слабое связывание в программировании
Иван Артамоновhttps://artamonoviv.ru/images/icon/logo.png
Внимание! Эта статья была опубликована в 2014 году в журнале "Инновации на основе информационных и коммуникационных технологий". Использование материалов из нее разрешено только при правильной библиографической ссылке (для докладов, курсовых работы, рефератов, дипломных и пр. научных работ) или url-ссылки (для сайтов). Библиографическое описание дано в конце статьи.
Существует несколько технологических подходов к решению задач интеграции и поддержки унаследованных систем. Все эти подходы, на наш взгляд, являются последовательными эволюционными этапами по пути общего развития информационных технологий и устранения своих внутренних недостатков. Так, многие авторы выделяют основное свойство интеграционных решений, развитие которого обуславливает по большей мере и развитие подходов к интеграции, – связывание.

Определения

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

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

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

Связанность - степень тесноты технологической связи между интегрируемыми системами.

Связанность определяет технические и организационные аспекты интеграции, а также направляет развитие интегрированной системы целиком.

Отмечу сразу, что я не приветствую перевод этого термина, данный в русской Википедии как "зацепление". В литературе и русскоязычной прессе 2000-х годов, когда вместе с сервис-ориентированной моделью продвигалась идея слабого связывания, под ним понималось слово coupling, а не cohesion. На мой взгляд, большинство профессионалов отрасли (а не несколько теоретиков, на которые ссылается Вики) слово "связывание" относит к слову "coupling", а не к слову cohesion. Однако если вам удобнее считать по-другому, просто переставьте в уме эти два термина, читая мою статью.

Выделяют два диаметрально противоположных вида связывания, и эволюция всех интеграционных технологий последовательно перемещалась от одного к другому: сильное (tightly) и слабое (loosely) связывание (coupling).

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

Например, сильно связанными являются методы одного приложения: они выполняются в одном адресном пространстве, разделяют общие переменные, вызов и передача информации происходит с минимальным задержками. В распределенной среде признаками сильного связывания обладают прямой сетевой вызов или удаленный вызов процедур (RPC), позволяющий разнородным процессам вызывать методы друг друга безотносительно к их расположению в сетевой среде.

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

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

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

Пример сильного и слабого связывания

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

Предположим, вы часто ездите на междугородних поездах. Для того чтобы покупать билеты вы, начиная с конца 90-х годов, использовали сестру своей мамы - тетю Галю, которая работала кассиром на вокзале. Вы звонили тете Гале, называли параметры своей поездки, а она на следующий день покупала вам подходящий билет. Тетя Галя использовала свою корпоративную скидку, покупала вам билет дешевле общего ценника, но разницу забирала себе. Вам же доставался билет за полную стоимость, но не нужно было стоять в очередях в кассы вокзала. Тетя Галя сделала все за вас по звонку.

А теперь представьте себе такую ситуацию. Проходит 10 лет и нескольких сотен ваших безмятежных поездок. В очередной раз вы звоните любимой тете. Но вдруг узнаете, что тетя Галя по не зависящим от вас причинам недавно уволилась с работы кассиром (оказалось, что она нарушала правила использования корпоративной скидки). Что теперь делать?! Вы бросаетесь в панику. Начинаете узнавать у знакомых, как покупать билеты. Бежите на вокзал. Покупаете сначала не туда. Потом не на то время. Страдаете, бегаете сдавать билеты и в конечном итоге пропускаете необходимый поезд и командировку.

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

А теперь представим, как бы развивалась ситуация, если бы вы покупали билеты с помощью слабого связывания. В конце 90-х годов вы бы ходили на вокзальные кассы (сейчас же есть и сайт, и приложение РЖД). Подходили ли бы к любому кассиру, называли бы поезд, дату и покупали бы желаемый билет. Для вас не имело бы значения, как зовут кассира, сколько ему лет, кто его родственники и как он живет. Кассир действовал бы с вами через строго определенный интерфейс, заданный его служебными инструкциями.

Кассир может делать несколько четко заданных функций. Но эти же функции может делать любой кассир, хотя они все - разные люди. И вы, зная только список и способы работы этих функций, можете взаимодействовать с любым кассиром. Можете их даже не запоминать. Любой кассир все равно будет выполнять эти функции.

Знакомая ситуация?

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

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

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

Сравнение сильного и слабого связывания

Рассмотрим технические аспекты различий сильного и слабого связывания:

ФакторСлабое связываниеСильное связывание
Физическая связьНепрямая, через промежуточное программное обеспечениеПрямая
Тип взаимодействияАсинхронныйСинхронный
Передача сообщенийДокументно-ориентированнаяRPC
Путь передачи данныхМаршрутизируетсяЖестко фиксирован
Объединение технологийГетерогенноеГомогенное
Типы данныхНезависимыеЗависимые
Определение синтаксисаПо взаимному соглашениюПубликуется в открытом доступе
Связывание (компонентов во время выполнения)Фиксированное и предварительноеПозднее, отложенное
Цель интеграцииПовторное использование, повышение эффективностиШирокая применимость
Последствия интеграцииОжидаемыеНепредскауземые

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

С другой стороны, сильная связанность позволяется повысить уровень контролируемости системы и, что уж скрывать, скорости работы системы.


Библиографическое описание

Артамонов, И. В. Слабое связывание как фактор эволюции технологий интерграции распределенных систем / И. В. Артамонов // Инновации на основе информационных и коммуникационных технологий : материалы кон-ференции. – Москва, 2014. – С. 294–297.

URL-ссылка

https://artamonoviv.ru/articles/loose_coupling/

Ссылка на описание в РИНЦ