【问题标题】:Relation between two classes两个类之间的关系
【发布时间】:2011-10-30 22:13:48
【问题描述】:

我有一个 A 类(调度程序),它处理接收到的数据的通信和解析,应该将它传递给 B 类(应用程序的业务逻辑)。

B类和A类应该互相调用,因为通信是双向的: 从业务逻辑层发送数据并接收数据作为响应。

任何可用于促进 A 类和 B 类之间通信的最佳设计的建议。我认为它们不应该只是相互指向。

【问题讨论】:

    标签: .net design-patterns architecture


    【解决方案1】:

    如果这是一个长时间运行的操作,您可以考虑将这些操作实现为 BeginOperation()EndOperation() 方法对,使用回调或其他异步模式(检查 Asynchronous Programming Design Patterns)。

    我也会避免循环引用。我将以与 WCF Duplex 服务类似的方式实现这一点。在项目 B 中创建您的业务类 B,以及表示其他项目需要实现以便从 B 回调的合同的接口,我们将其称为 IBCallbackContract。所以你需要:

    1. 创建 B 类
    2. 创建IBCallbackContract
    3. 创建将采用回调对象的Initialize(IBCallbackContract) 方法
    4. 创建使用 BL 类的 A 类
    5. 在项目A中实现IBCallbackContract,我们称之为BLCallback
    6. 在 A 启动时,创建一个 BLCallback 的实例
    7. 调用B的Initialize方法,发送BLCallback的实例

    【讨论】:

    • 当我从通信(A 类)中得到一些东西时,我需要的路径是到 BL(B 类)。但有时 BL 需要向 A 类发送数据,与某些调用无关只需将其发送到通信层即可。
    • 那你没有太多选择了。您将通过共享项目中的代理创建回调或间接循环引用。我个人会寻求回调,因为当我想到这样的项目会变得多么混乱时,循环引用让我感到害怕。我在回答中编辑了我的建议。
    【解决方案2】:

    一个简单的解决方案是使用 B 类上的方法发送信息并使用 B 类上的事件接收数据。当您启动时,A 类订阅该事件,现在两种方式的通信将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      相关资源
      最近更新 更多