在 ASP.Net 样板中,从应用程序服务层调用 SignalR Hub 是一种不好的做法吗?

Is calling a SignalR Hub from the Application Service Layer a bad practice in ASP.Net Boilerplate?



我将 Asp.Net 样板模板与 ASP.Net Core 2.1.
一起使用 我在 Web.Core 程序集中实现了一个集线器并创建了一个控制器。
我可以 subcribe/notify 来自任何客户端的集线器数据,这不是我的问题。

我想在应用服务层使用这个 Hub,但是应用服务层默认不引用 SignalR。

所以我的问题是:
在应用程序服务层中引用 SignalR 是一种不好的做法吗?

提前致谢!

此致, 皮埃尔-吕克

在应用层直接依赖网络功能不是一个好的做法。因为,假设表示层独立。

我想你有几个选择;

  1. 如果您认为您从不更改 SignalR 并且您从不使用来自其他应用程序的应用程序层,那么您可以直接引用 SignalR 并使用它。不过,这应该是最坏的情况了。
  2. 在应用层抽象SignalR通信(定义接口),在web层实现。在这种情况下,最好在应用层中定义一个 Null 实现(如果您不知道,请搜索"null object pattern")以消除依赖性并允许应用层在没有 SignalR 的情况下可用。
  3. 如果您的应用程序层无法使用 null 实现(可能需要来自客户端的真实答案),那么您应该考虑将依赖于 SignalR 的代码移动到 Web 层。

所以,就像任何好的答案一样,这取决于 :)