ASP.NET Core - лучший способ уменьшить зависимости в бизнес-сервисах

Это веб-приложение под управлением ASP.NET Core MVC 2.1, которое начиналось как приложение ASP.NET MVC 3 и развивалось в течение 5 лет.

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

Например, служба A выполняет действие, а затем запускает другое действие в службе B. И затем конечный результат должен быть отправлен обратно пользователю. Это упрощение, конечно.

В некоторых случаях я использую служебную шину Azure для разделения процессов. Таким образом, служба A выполняет действие, а затем ставит в очередь действие, которое запускает процесс в службе B. Затем служба B отправляет HTTP-запрос в веб-приложение, чтобы уведомить пользователей. Этот подход сработал хорошо, но я не уверен, стоит ли применять его в масштабе всей системы. Это добавляет сложности наверняка, так как отладка не так проста.

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

Я обнаружил, что шаблон запрос-ответ, примененный к служебной шине Azure, действительно полезен, но я не смог найти примеры кода. Документация находится здесь: https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sessions#request-response-pattern

Я думал о чем-то вроде этого, но я не мог найти хороший пример кода

Любые рекомендации приветствуются :)

Всего 1 ответ


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

Недавно я работал над проектом компании, который намеревался уйти, например, под названием «Архитектура Звезды Смерти» , что несколько близко к вашей проблеме. Чтобы избежать связи между проектами / службами, компания решила перейти на широкие решения на основе микросервисов Azure ( приложения логики , фабрики данных , функции Azure и т. Д.). Хотя стоит упомянуть, что решение решило проблемы со связями, поскольку с помощью микросервисов Azure вы можете легко переключаться между решениями, не беспокоясь о зависимостях.

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

Еще одна вещь, на которую я могу предложить вам взглянуть, это подход реактивного программирования .

Также вы можете посмотреть эту ветку. Есть несколько хороших предложений, которые стоит упомянуть.


Есть идеи?

10000