Оба способствуют высокой сплоченности и низкой связанности. В обоих случаях междисциплинарные задачи отделены от основной задачи бизнеса. Так какая разница?

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

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

Сходства — Высокая согласованность и низкая связанность

Что это значит?

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

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

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

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

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

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

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

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

Как я уже писал, высокая связность и низкая связанность могут применяться на разных уровнях программного обеспечения — функциях, классах, сборках, службах и системах. Эта область применения отличается от внепроцессного проектирования и аспектно-ориентированного программирования. Посмотрим, как

Разница — как достигается высокая сплоченность и низкая связанность?

Аспектно-ориентированное программирование (АОП)

АОП — это парадигма программирования для модуляции кода приложения с разделением задач.

  1. АОП позволяет инкапсулировать сквозные задачи.
  2. АОП предоставляет механизмы для вызова этих сквозных проблем из основных проблем декларативным способом.

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

Выходные данные будут загружаться как единый процесс, предназначенный для одной среды выполнения, поэтому выбор технологий должен быть совместим со средой выполнения. Например, нельзя будет использовать инструмент АОП для java в приложении .NET.

Внепроцессный дизайн

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

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

Это дает несколько преимуществ за счет сложности:

  1. Сквозные процессы могут быть в любой технологии, пока возможна связь с основным приложением.
  2. Поскольку смешивать технологии проще, можно найти наиболее подходящий инструмент для каждой задачи, а не искать хорошее универсальное решение.
  3. Он обеспечивает автономное масштабирование процессов.
  4. Сквозной процесс можно обновить или заменить, не затрагивая основное приложение.

Сводка

AOP — Сохраняет проблему изолированной на уровне кода.

OOPD — разделяет проблемы на уровне процессов или служб.

Дальнейшее обучение и кредиты

Подробнее об АОП — https://www.youtube.com/watch?v=71vp0t1e2Xw

Внепроцессный дизайн и Side Car Proxy — Зачем нам мультиконтейнерные модули?

Как используется сервисная сетка Внепроцессное проектирование — Что такое сервисная сетка? И зачем нам это, а не Kubernetes?