Является ли вызов концентратора SignalR с уровня службы приложений плохой практикой в ASP.Net Шаблон?

#c# #signalr-hub #aspnetboilerplate

#c# #signalr-hub #aspnetboilerplate

Вопрос:

Я использую Asp.Net шаблон шаблонного режима с ASP.Net Ядро 2.1.
Я реализовал концентратор в Интернете.Сборка ядра и создание контроллера.
Я могу подписывать / уведомлять данные с помощью моего концентратора от любого клиента, это не моя проблема.

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

Итак, мой вопрос таков:
является ли плохой практикой ссылаться на SignalR на уровне служб приложений?

Заранее спасибо!

С уважением, Пьер-Люк

Комментарии:

1. ДА. Вы можете зарегистрировать интерфейс (с нулевой реализацией), который вы реализуете на веб-уровне.

2. Почему бы и нет, но как я могу тогда внедрить свой интерфейс? Сегодня я внедряю свой концентратор следующим образом: IHubContext<MyHub>

3. Внедрить IMyNotifier . Его реализация может внедряться IHubContext<MyHub> .

4. Итак, я должен ссылаться на SignalR на уровне службы приложений?

5. На веб-уровне, как я уже упоминал в своем первом комментарии.

Ответ №1:

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

Я думаю, у вас есть несколько вариантов;

  1. Если вы думаете, что вы никогда не меняете SignalR и никогда не используете прикладной уровень из другого приложения, тогда вы можете напрямую ссылаться на SignalR и использовать его. Однако это должно быть наихудшим случаем.
  2. Абстрагируйте связь SignalR (определите интерфейс) на уровне приложения и реализуйте ее на веб-уровне. В этом случае полезно определить нулевую реализацию (найдите «шаблон нулевого объекта», если вы не знаете) на прикладном уровне, чтобы удалить зависимость и позволить использовать прикладной уровень без SignalR.
  3. Если ваш прикладной уровень не может работать с реализацией null (возможно, ему нужен реальный ответ от клиента), тогда вам следует подумать о переносе вашего кода, зависящего от SignalR, на веб-уровень.

Итак, как и любой хороший ответ, это зависит 🙂