0

所以说我有:

public interface SystemA
{
    void MethodA(string a, string b, int c);
}

在我的应用程序的某个地方,

public class ClientA
{
    public SystemA mSystemA;
    public ClientA()
    {
         mSystemA.MethodA("whatever", "ok", 42);
    }
}

但我试图弄清楚如何改变它以满足以下要求,

  1. 对系统上的方法的调用可能会也可能不会收到特定的响应
  2. 期望响应的方法可能会根据发送后经过的时间触发不同的操作,例如再次调用该方法、通知客户端或通知系统
  3. 客户端也必须能够接收消息
  4. 我希望系统(或接收客户端)的接口是唯一需要改变的东西。
  5. 最小的开销
  6. 避免使用单例,因为它们会破坏可重用性并造成紧密耦合

具体来说,我有三个系统(其中有很多)负责与远程资源进行交互,并且无法保证对其接口的调用是否会让我得到响应,或者我什么时候会得到响应,或者响应是否会有效 - 在系统本身和使用它们的客户端中处理这些情况非常复杂,即使有状态来专门分配行为。

我尝试或考虑过但不喜欢的事情:

  • 事件系统 - 您必须为要向系统公开的每个新方法定义新事件和侦听器,并且每当您更改方法时,您必须更改所有要匹配的事件、所有侦听器等。还有 FAR使用它的开销很大。如果您指定希望指定每个事件的参数,它会创建大量工作,但是如果您使事件真正通用,那么您最终不得不在发送者和接收者之间来回来回匹配它们。
  • 命令 - 您必须为接收器上的每个方法定义新命令,并且每次要更改它们所依赖的方法时,您都必须更改命令。除此之外,每个命令的构造函数都必须匹配方法的签名。我觉得这也会有太多的开销。

想法?

4

1 回答 1

1

我不确定我是否理解您的要求(特别是#1 让我感到困惑),但我最好的猜测是您正在描述典型的异步客户端-服务器通信机制。

如果是这种情况,请考虑使用消息队列。调用和响应被放置在适当的客户端或服务器队列中。调用与响应的关联是通过某种 cookie 或 uid 完成的。客户端可以跟踪它发送请求的时间和接收响应的时间等。

这是否涉及一些开销?当然可以。但是,如果您的要求需要开销,那真的是开销吗?

于 2012-08-03T15:02:02.047 回答