Архитектура веб-приложений. Какие бывают проблемы и попытка их решений.

preview_player
Показать описание
Архитектура приложений — что это значит? Расположение папок? Структура кода? Взаимодействие объектов и компонентов между друг другом? Ответы могут быть расплывчатыми и неконкретными, ведь ответ в себе содержит все эти пункты сразу.

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

Одно из определений из книги Мартин, Роберт: “Чистая архитектура”.

Все понятно? Готовы уже писать код? Если нет, то предлагаю посмотреть видео с нашего внутреннего митапа под названием “Архитектура приложений”. В нем мы разберем философию архитектуры, разберемся с определением, проведем небольшой обзор по потому как мы живем в бекенде веб приложений с MVC и разберем его аналоги.

Готовы коснуться одной из сложнейших тем и погрузиться в нее с нами? Тогда вперёд.

00:00 Вступление, немного о себе
00:44 Что такое архитектура
01:37 Цель формы
02:03 Как определить качество архитектуры
02:51 Статистика
07:45 Текущая архитектура приложения/MVC
08:39 Переворачиваем игру/Services и Repositories, плюсы и минусы
13:23 Выход из ситуации/
Декомпозиция репозиториев и сервисов, превращение первых в UseCase
Создание компонентов/логических модулей для работы с группами кейсов
Компоненты по принципам SOLID
15:26 SOLID
19:47 Итоги разбиения на компоненты
20:51 Интересная заметка о Django
21:13 Архитектура на основе предметной области
25:19 Архитектура - это “Почему”, а не “Как”
26:33 Чистая архитектура (Роберт Мартин)

32:44 Полезная информация

Полезная информация на последнем слайде от спикера
1) Чистый код, чистая архитектура
2) Книги "Чистый код" и "Чистая архитектура", Роберт Мартин

33:08 ВОПРОСЫ:
33:11 Перенос проекта вчистую архитектуру
34:10 Есть ли способ избежать скатывания кода проекта в яму?
35:48 Чистая архитектура - это альтернатива МVС или дополнение?
38:22 В чем отличие репозитория между моделями?
40:55 Принцип разделения интерфейсов, примеры.
44:17 Грозит ли разделение MVC созданием уникального кода, который поймет только разработчик его написавший?
47:55 Что можно сделать с одним большим божественным сервисом?
54:25 Все зависит от ТЗ?

#ityoutubersru #backend #архитектура
Рекомендации по теме
Комментарии
Автор

1. Паттерн репозитория предполагает наличие не только выборка и фильтрации, но и Добавление удаление и обновление элементов коллекции.
2. Исходя из этого есть ли целесообразность создавать доп прослойку если есть уже ActionRecord. Многие объясняют это тем что в случае с репозиторием можно заменить реализацию или вообще подключиться к другой бд. Но на самом же деле в реальных проектах никто в большинстве случаев не меняет на лету бд. Не кажется ли вам это за благовременной оптимизацией которая скорее просто оверкод чем полезный архитектурный ход

vlad
Автор

Вопросов нет, это значит никто ничего не понял ) компоненты лучше называть модулями (или package) как остальные делают. Доклад очень объемный по затронутым темам поэтому раскрыть ничего не получилось. Человек который ничего не знал про данную тематику ничего не вынесет из такого доклада. Лучше было бы показать в коде отделение сервиса от контроллера и взаимодействие с репозиторием слушатель унес хотя бы это. Объяснение принципов SOLID можно выбросить полностью (тем более что оно не совсем корректное) из чистой архитектуры на первом этапе лучше объяснить инверсию зависимостей с примером кода и рассказом про (не)зависимость слоев, круговая диаграмма ничего сама по себе не объясняет, код гораздо лучше.
"Talk is cheap. Show me the code." - Linus Torvalds

supramg
Автор

Вопрос был "как понять когда сервис стал сильно большой и его нужно дробить?"
У меня на этот счет есть решение. Я назвал этот слой Actions. Action - это класс, который должен решать только одну задачу. Так же я определил и задокументировал что можно и что нельзя делать в action, например нельзя использовать action как контейнер для запросов, т.к. это решает Repositories и тд

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

v-dubcurrency
Автор

Можно прочитать elegant objects нгорп бугаенко и решить эти проблемы

geekchannel