【发布时间】:2021-01-23 09:55:32
【问题描述】:
我有一个分为多层的应用程序 (A1)。有些层用于用户交互,有些用于与不同的数据库交互,有些包含业务逻辑。我们有另一个第三方应用程序 (A2) 向 (A1) 发送请求,A1 需要响应该请求。下面是A1的架构。
T3(此层接收来自 A2 应用程序的请求)
T2(业务逻辑)
T1(用户界面)
T2 包含所有的业务逻辑。我面临的问题是当我收到来自 A2 应用程序的请求时。我需要根据 T2 中出现的一些业务逻辑来响应请求。我可以从 T2 订阅的 T3 调用事件,但我必须从事件处理程序中获取数据,如下所示;
T3:
public Response CanStore(string materialType){
//Invoke event and wait to get response from T2
return response.;
}
T2:订阅了T3的事件
public async void canStore(object sender, EventArgs e){
//Perform some logic and response result to T3
}
有可能吗?
【问题讨论】:
-
当您说“层”时,这些逻辑层是指这些逻辑层(即同一运行进程中的程序集)还是使用 HTTP 或 gRPC 之类的单独服务?
-
是的。运行过程是一样的
-
那么为什么 T3 -> T2 使用事件呢?为什么不直接调用方法并获得响应?
-
@Fildor 如果是这样,您可以从应用程序接收事件直接调用业务逻辑,这就是我的方式。我不知道你为什么要反过来
-
“因为 T3 没有 T2 的参考。” ...为什么不呢?什么是是 T3?它的目的是什么?它是某种 API(也许可以替代在 T1 中使用用户界面?)?这似乎很可能,正如您所说,它可以接收来自其他应用程序的请求。如果是这样,那么引用业务逻辑层将是有意义的。为什么 T2 需要引用 T3 呢?这似乎是错误的方式。 T3是否也有其他用途?如果是这样,那么考虑将组件拆分为 2 个(或更多)具有特定用途的组件。
标签: c# event-handling