Здравствуйте, 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>Как делать инициализацию? В какой точке? И в каком месте указанной картинки эта точка должна располагаться?
Можно самодиагностику перенести в сами сервисы, чтобы проверка была по мере необходимости работы с этими сервисами.
Тут о проблемах узнаем, если вообще узнаем, по мере работы приложения. Может какой-то сервис недоступен, а он и никем
не использовался какой-то промежуток времени.