Фото автора Александр Эндрюс на Unsplash

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

Шаблон – это решение проблемы в определенном контексте.

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

Позволь мне объяснить тебе…!

  • Многоуровневая архитектура
  • Труба и фильтр
  • Клиент-сервер
  • Контроллер представления модели
  • Архитектура, управляемая событиями
  • Архитектура микросервисов

Большие данные: лямбда-архитектура в двух словах

Как нам победить теорему CAP?

levelup.gitconnected.com

Многоуровневая архитектура

Наиболее распространенным архитектурным шаблоном является многоуровневая архитектура, известная как n-уровневая архитектура. Он широко известен большинству архитекторов программного обеспечения, дизайнеров, разработчиков. Хотя конкретных ограничений в отношении количества и типа слоев, которые должны существовать, нет, большая часть многоуровневой архитектуры состоит из четырех уровней: представления, бизнеса, сохраняемости и базы данных, как показано ниже.

популярный пример n-уровневой архитектуры

Контекст

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

Проблема

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

Решение

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

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

Закрытые слои и запросить доступ

Слабое место

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

Добавление уровней также увеличивает первоначальные затраты и сложность системы.

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

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

Шаблоны проектирования: структурные паттерны классов и объектов проектирования

Адаптер, Декоратор, Прокси, Информационный эксперт, Композит, Мост, Низкая связь, Приспособленец, Защищенные варианты и…

levelup.gitconnected.com

Многоуровневый шаблон

Контекст

При распределенном развертывании часто возникает необходимость распределить инфраструктуру системы на отдельные подмножества.

Проблема

Как мы можем разделить систему на несколько вычислительно независимых исполнительных структур: группы программного и аппаратного обеспечения, соединенные некоторыми средствами связи?

Решение

многоуровневый пример — потребительский веб-сайт J2EE

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

Слабое место

Существенные первоначальные затраты и сложность.

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

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

Труба и фильтр

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

стиль фильтра трубы

Контекст

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

Проблема

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

Решение

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

В этом стиле существует четыре типа фильтров, как показано ниже.

  • производитель (source): начальная точка процесса.
  • преобразователь (map): выполняет преобразование некоторых или всех данных.
  • тестер (reduce): проверяет один или несколько критериев.
  • потребитель (sink): конечная точка.

Слабое место

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

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

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

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

Компиляторы: последовательные фильтры выполняют лексический анализ, синтаксический анализ, семантический анализ и генерацию кода.

Клиент-сервер

Контекст

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

Проблема

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

Решение

В клиент-серверном стиле компоненты и коннекторы имеют определенное поведение.

  • Компоненты, называемые «клиентами», отправляют запросы компоненту, называемому «сервером», и ждут ответа.
  • Серверный компонент получает запрос от клиента и отправляет ему ответ.

Слабое место

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

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

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

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

Контроллер представления модели

https://www.ausy.fr/alex/f1/P-v-M010.html

https://www.ausy.fr/alex/f1/P-v-M011.html

https://www.ausy.fr/alex/f1/P-v-M012.html

https://www.ausy.fr/alex/f1/P-v-M013.html

https://www.ausy.fr/alex/f1/P-v-M014.html

https://www.ausy.fr/alex/f1/P-v-M015.html

https://www.ausy.fr/alex/f1/P-v-M016.html

https://www.ausy.fr/alex/f1/P-v-M017.html

https://www.ausy.fr/alex/f1/P-v-M018.html

https://www.ausy.fr/alex/f1/P-v-M019.html

https://www.ausy.fr/alex/f1/psg-v-mona-00.html

https://www.ausy.fr/alex/f1/psg-v-mona-01.html

https://www.ausy.fr/alex/f1/psg-v-mona-02.html

https://www.ausy.fr/alex/f1/psg-v-mona-03.html

https://www.ausy.fr/alex/f1/psg-v-mona-04.html

https://www.ausy.fr/alex/f1/psg-v-mona-05.html

https://www.ausy.fr/alex/f1/psg-v-mona-06.html

https://www.ausy.fr/alex/f1/psg-v-mona-07.html

https://www.ausy.fr/alex/f1/psg-v-mona-08.html

https://www.ausy.fr/alex/f1/psg-v-mona-09.html

https://carepropertyinvest.be/invest/f1/P-v-M010.html

https://carepropertyinvest.be/invest/f1/P-v-M011.html

https://carepropertyinvest.be/invest/f1/P-v-M012.html

https://carepropertyinvest.be/invest/f1/P-v-M013.html

https://carepropertyinvest.be/invest/f1/P-v-M014.html

https://carepropertyinvest.be/invest/f1/P-v-M015.html

https://carepropertyinvest.be/invest/f1/P-v-M016.html

https://carepropertyinvest.be/invest/f1/P-v-M017.html

https://carepropertyinvest.be/invest/f1/P-v-M018.html

https://carepropertyinvest.be/invest/f1/P-v-M019.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-00.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-01.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-02.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-03.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-04.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-05.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-06.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-07.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-08.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-09.html

https://carepropertyinvest.be/invest/s-1/soc-o-v-h5.html

https://carepropertyinvest.be/invest/s-1/soc-o-v-h6.html

https://carepropertyinvest.be/invest/s-1/soc-o-v-h7.html

https://carepropertyinvest.be/invest/s-1/soc-o-v-h8.html

https://carepropertyinvest.be/invest/s-1/soc-o-v-h9.html

https://www.ausy.fr/alex/s-1/soc-o-v-h5.html

https://www.ausy.fr/alex/s-1/soc-o-v-h6.html

https://www.ausy.fr/alex/s-1/soc-o-v-h7.html

https://www.ausy.fr/alex/s-1/soc-o-v-h8.html

https://www.ausy.fr/alex/s-1/soc-o-v-h9.html

https://www.ausy.fr/alex/f1/m-v-pf04.html

https://www.ausy.fr/alex/f1/m-v-pf05.html

https://www.ausy.fr/alex/f1/m-v-pf06.html

https://www.ausy.fr/alex/f1/m-v-pf07.html

https://www.ausy.fr/alex/f1/fr-PSG-Mon-f1.html

https://www.ausy.fr/alex/f1/fr-PSG-Mon-f2.html

https://www.ausy.fr/alex/f1/fr-PSG-Mon-f3.html

https://www.ausy.fr/alex/f1/fr-PSG-Mon-f4.html

https://www.ausy.fr/alex/f1/fr-PSG-Mon-f5.html

https://carepropertyinvest.be/invest/f1/m-v-pf04.html

https://carepropertyinvest.be/invest/f1/m-v-pf05.html

https://carepropertyinvest.be/invest/f1/m-v-pf06.html

https://carepropertyinvest.be/invest/f1/m-v-pf07.html

https://carepropertyinvest.be/invest/f1/fr-PSG-Mon-f1.html

https://carepropertyinvest.be/invest/f1/fr-PSG-Mon-f2.html

https://carepropertyinvest.be/invest/f1/fr-PSG-Mon-f3.html

https://carepropertyinvest.be/invest/f1/fr-PSG-Mon-f4.html

https://carepropertyinvest.be/invest/f1/fr-PSG-Mon-f5.html

https://www.ausy.fr/alex/e-1/bir-v-cov-liv-01.html

https://www.ausy.fr/alex/e-1/bir-v-cov-liv-02.html

https://www.ausy.fr/alex/e-1/bir-v-cov-liv-03.html

https://www.ausy.fr/alex/e-1/bir-v-cov-liv-04.html

https://www.ausy.fr/alex/e-1/bir-v-cov-liv-05.html

https://www.ausy.fr/alex/e-1/bir-v-cov-liv-06.html

https://www.ausy.fr/alex/e-1/bir-v-cov-liv-07.html

https://www.ausy.fr/alex/e-1/bir-v-cov-liv-08.html

https://www.ausy.fr/alex/e-1/cove-v-birm-liv-elc-001.html

https://www.ausy.fr/alex/e-1/cove-v-birm-liv-elc-002.html

https://www.ausy.fr/alex/e-1/cove-v-birm-liv-elc-003.html

https://www.ausy.fr/alex/e-1/cove-v-birm-liv-elc-004.html

https://www.ausy.fr/alex/e-1/cove-v-birm-liv-elc-005.html

https://www.ausy.fr/alex/e-1/cove-v-birm-liv-elc-006.html

https://www.ausy.fr/alex/e-1/cove-v-birm-liv-elc-007.html

https://www.ausy.fr/alex/e-1/cove-v-birm-liv-elc-008.html

https://www.ausy.fr/alex/e-1/cove-v-birm-liv-elc-009.html

https://carepropertyinvest.be/invest/e-1/bir-v-cov-liv-01.html

https://carepropertyinvest.be/invest/e-1/bir-v-cov-liv-02.html

https://carepropertyinvest.be/invest/e-1/bir-v-cov-liv-03.html

https://carepropertyinvest.be/invest/e-1/bir-v-cov-liv-04.html

https://carepropertyinvest.be/invest/e-1/bir-v-cov-liv-05.html

https://carepropertyinvest.be/invest/e-1/bir-v-cov-liv-06.html

https://carepropertyinvest.be/invest/e-1/bir-v-cov-liv-07.html

https://carepropertyinvest.be/invest/e-1/bir-v-cov-liv-08.html

https://carepropertyinvest.be/invest/e-1/cove-v-birm-liv-elc-001.html

https://carepropertyinvest.be/invest/e-1/cove-v-birm-liv-elc-002.html

https://carepropertyinvest.be/invest/e-1/cove-v-birm-liv-elc-003.html

https://carepropertyinvest.be/invest/e-1/cove-v-birm-liv-elc-004.html

https://carepropertyinvest.be/invest/e-1/cove-v-birm-liv-elc-005.html

https://carepropertyinvest.be/invest/e-1/cove-v-birm-liv-elc-006.html

https://carepropertyinvest.be/invest/e-1/cove-v-birm-liv-elc-007.html

https://carepropertyinvest.be/invest/e-1/cove-v-birm-liv-elc-008.html

https://carepropertyinvest.be/invest/e-1/cove-v-birm-liv-elc-009.html

https://www.ausy.fr/alex/f1/m-v-h01.html

https://www.ausy.fr/alex/f1/m-v-h02.html

https://www.ausy.fr/alex/f1/m-v-h03.html

https://www.ausy.fr/alex/f1/m-v-h04.html

https://www.ausy.fr/alex/f1/m-v-h05.html

https://www.ausy.fr/alex/f1/m-v-h06.html

https://www.ausy.fr/alex/f1/psg-v-mona-X00.html

https://www.ausy.fr/alex/f1/psg-v-mona-X01.html

https://www.ausy.fr/alex/f1/psg-v-mona-X02.html

https://www.ausy.fr/alex/f1/psg-v-mona-X03.html

https://www.ausy.fr/alex/f1/psg-v-mona-X04.html

https://www.ausy.fr/alex/f1/psg-v-mona-X05.html

https://www.ausy.fr/alex/f1/psg-v-mona-X06.html

https://www.ausy.fr/alex/f1/psg-v-mona-X07.html

https://www.ausy.fr/alex/f1/psg-v-mona-X08.html

https://www.ausy.fr/alex/f1/psg-v-mona-X09.html

https://www.ausy.fr/alex/f1/psg-v-mona-X10.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X00.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X01.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X02.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X03.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X04.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X05.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X06.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X07.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X08.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X09.html

https://carepropertyinvest.be/invest/f1/psg-v-mona-X10.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S00.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S01.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S02.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S03.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S04.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S05.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S06.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S07.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S08.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S09.html

https://carepropertyinvest.be/invest/i-1/It-Fro-Cos-S10.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S00.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S01.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S02.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S03.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S04.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S05.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S06.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S07.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S08.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S09.html

https://www.ausy.fr/alex/i-1/It-Fro-Cos-S10.html

https://carepropertyinvest.be/invest/e-1/C-v-B000-0.html

https://carepropertyinvest.be/invest/e-1/C-v-B000-1.html

https://carepropertyinvest.be/invest/e-1/C-v-B000-2.html

https://carepropertyinvest.be/invest/e-1/C-v-B000-3.html

https://carepropertyinvest.be/invest/e-1/C-v-B000-4.html

https://carepropertyinvest.be/invest/e-1/C-v-B000-5.html

https://carepropertyinvest.be/invest/e-1/C-v-B000-6.html

https://carepropertyinvest.be/invest/e-1/C-v-B000-7.html

https://carepropertyinvest.be/invest/e-1/C-v-B000-8.html

https://www.ausy.fr/alex/e-1/C-v-B000-0.html

https://www.ausy.fr/alex/e-1/C-v-B000-1.html

https://www.ausy.fr/alex/e-1/C-v-B000-2.html

https://www.ausy.fr/alex/e-1/C-v-B000-3.html

https://www.ausy.fr/alex/e-1/C-v-B000-4.html

https://www.ausy.fr/alex/e-1/C-v-B000-5.html

https://www.ausy.fr/alex/e-1/C-v-B000-6.html

https://www.ausy.fr/alex/e-1/C-v-B000-7.html

https://www.ausy.fr/alex/e-1/C-v-B000-8.html

https://carepropertyinvest.be/invest/s-1/Os-Hu-00.html

https://carepropertyinvest.be/invest/s-1/Os-Hu-01.html

https://carepropertyinvest.be/invest/s-1/Os-Hu-02.html

https://carepropertyinvest.be/invest/s-1/Os-Hu-03.html

https://carepropertyinvest.be/invest/s-1/Os-Hu-04.html

https://carepropertyinvest.be/invest/s-1/Os-Hu-05.html

https://carepropertyinvest.be/invest/s-1/Os-Hu-06.html

https://carepropertyinvest.be/invest/s-1/Os-Hu-07.html

https://carepropertyinvest.be/invest/s-1/Os-Hu-08.html

https://carepropertyinvest.be/invest/s-1/Os-Hu-09.html

https://www.ausy.fr/alex/s-1/Os-Hu-00.html

https://www.ausy.fr/alex/s-1/Os-Hu-01.html

https://www.ausy.fr/alex/s-1/Os-Hu-02.html

https://www.ausy.fr/alex/s-1/Os-Hu-03.html

https://www.ausy.fr/alex/s-1/Os-Hu-04.html

https://www.ausy.fr/alex/s-1/Os-Hu-05.html

https://www.ausy.fr/alex/s-1/Os-Hu-06.html

https://www.ausy.fr/alex/s-1/Os-Hu-07.html

https://www.ausy.fr/alex/s-1/Os-Hu-08.html

https://www.ausy.fr/alex/s-1/Os-Hu-09.html

https://www.ausy.fr/alex/f1/Mon-v-PSG-liv-hd-01.html

https://www.ausy.fr/alex/f1/Mon-v-PSG-liv-hd-02.html

https://www.ausy.fr/alex/f1/Mon-v-PSG-liv-hd-03.html

https://www.ausy.fr/alex/f1/Mon-v-PSG-liv-hd-04.html

https://www.ausy.fr/alex/f1/Mon-v-PSG-liv-hd-05.html

https://www.ausy.fr/alex/f1/Mon-v-PSG-liv-hd-06.html

https://www.ausy.fr/alex/f1/Mon-v-PSG-liv-hd-07.html

https://www.ausy.fr/alex/f1/Mon-v-PSG-liv-hd-08.html

https://carepropertyinvest.be/invest/f1/Mon-v-PSG-liv-hd-01.html

https://carepropertyinvest.be/invest/f1/Mon-v-PSG-liv-hd-02.html

https://carepropertyinvest.be/invest/f1/Mon-v-PSG-liv-hd-03.html

https://carepropertyinvest.be/invest/f1/Mon-v-PSG-liv-hd-04.html

https://carepropertyinvest.be/invest/f1/Mon-v-PSG-liv-hd-05.html

https://carepropertyinvest.be/invest/f1/Mon-v-PSG-liv-hd-06.html

https://carepropertyinvest.be/invest/f1/Mon-v-PSG-liv-hd-07.html

https://carepropertyinvest.be/invest/f1/Mon-v-PSG-liv-hd-08.html

https://www.svkos.cz/l-1/Os-Hu-00.html

https://www.svkos.cz/l-1/Os-Hu-01.html

https://www.svkos.cz/l-1/Os-Hu-02.html

https://www.svkos.cz/l-1/Os-Hu-03.html

https://www.svkos.cz/l-1/Os-Hu-04.html

https://www.svkos.cz/l-1/Os-Hu-05.html

https://www.svkos.cz/l-1/Os-Hu-06.html

https://www.svkos.cz/l-1/Os-Hu-07.html

https://www.svkos.cz/l-1/Os-Hu-08.html

https://www.svkos.cz/l-1/Os-Hu-09.html

https://www.svkos.cz/l-1/soc-o-v-h5.html

https://www.svkos.cz/l-1/soc-o-v-h6.html

https://www.svkos.cz/l-1/soc-o-v-h7.html

https://www.svkos.cz/l-1/soc-o-v-h8.html

https://www.svkos.cz/l-1/soc-o-v-h9.html

Контекст

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

MVC против MVP против MVVM

Чем они отличаются?

levelup.gitconnected.com

Проблема

Как можно отделить функциональность пользовательского интерфейса от функциональности приложения и при этом реагировать на ввод данных пользователем или на изменения в данных базового приложения?

И как можно создавать, поддерживать и координировать несколько представлений пользовательского интерфейса при изменении базовых данных приложения?

Решение

Шаблон модель-представление-контроллер (MVC) разделяет функциональность приложения на три типа компонентов следующим образом.

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

Слабое место

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

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

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

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

Архитектура, управляемая событиями

Контекст

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

Проблема

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

Решение

Разверните независимые процессы/обработчики событий для обработки событий. Прибывающие события ставятся в очередь. Планировщик извлекает события из очереди и распределяет их по соответствующему обработчику событий на основе политики планирования.

Слабое место

Проблемы могут возникнуть с производительностью и восстановлением после ошибок.

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

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

  • Служба поддержки клиентов получает событие и пытается зарезервировать кредит для этого Заказа. Затем он публикует либо событие Credit Reserved, либо событие CreditLimitExceeded.
  • Служба заказов получает событие от службы поддержки клиентов и изменяет состояние заказа на одобренное или отмененное.

Архитектура микросервисов

Контекст

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

Проблема

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

Решение

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

Слабое место

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

Нам также нужно больше памяти.

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

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

Легко, верно?

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Подпишитесь на наш канал YouTube или присоединитесь к курсу собеседования по программированию Skilled.dev.