Re: Точка создания и инициализации конкретики приложения
От: Sharov Россия  
Дата: 08.05.24 09:25
Оценка: 1 (1) +1
Здравствуйте, zelenprog, Вы писали:

Z>Добрый день!


Z>Стараюсь сделать программу по архитектуре, которая описана в этой статье:

Z>https://habr.com/ru/companies/rosbank/articles/559116/

Z>Вот картинка из нее:

Z>Image: Чистая архитектура _ с использованием микросервисов.png

Z>Вроде бы все логично.

Z>Программный код разбил на модули в соответствии со статьей.
Z>Объекты в каком-либо слое содержат ссылки на соответствующие интерфейсы из других слоев.

Z>Осталось только все нужные объекты создать при запуске и инициализировать.

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

Z>Где (в каком месте, в каком слое) надо выполнять все эти операции?

Z>На вышеприведенной картинке не видно подходящего места.

Z>Например, запускается web-клиент. Ясное дело, что клиент ничего не знает про подключение к БД и про настройки БД.

Z>Слой БД тоже не знает про настройки БД. Он просто выполняет свою работу с любыми произвольными настройками, которые ему надо указать.
Z>А кто знает? Какой слой знает про особенности и настройки конкретной БД, чтобы ее проинициализировать?
Z>А ведь кроме БД нужно прочитать\установить настройки и других инфраструктурных микро-сервисов.

Слой БД про настройки бд знать таки должен, он скорее всего будет специфичен для соотв. бд. А вот Data Abstraction Layer,
т.е. пользователи ORM всяких должно быть пофигу.


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

Z>Верно?

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

Z>Но тогда получается, что это "плохой" God-объект.

Z>Ведь везде пишут что такие "всезнающие" объекты — это плохо.

Ну какой-то модуль, который знает про все необходимые внешние зависимости может таки понадобиться.
Это если проверять все на старте.

Z>Как же быть?

Z>Как делать инициализацию? В какой точке? И в каком месте указанной картинки эта точка должна располагаться?

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