你如何规范一个类的方法从另一个类的调用?

时间:2012-08-03 14:48:32

标签: c# design-patterns

所以说我有:

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. 避免单身,因为他们压缩可重用性并创造紧密耦合
  7. 具体来说,我有三个系统(其中很多)负责与远程资源的交互,并且无法保证对其接口的调用是否会给我一个响应,或者当我得到响应,或者响应将是有效的 - 在系统本身处理这些情况,并且使用它们的客户端非常复杂,即使有特定的行为分配状态。

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

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

    思想?

1 个答案:

答案 0 :(得分:1)

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

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

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