0

我有一个类可以处理与某些设备的通信。我称这个类为协议。该类不包含任何状态信息,因此我创建了一个模型类,它应该公开协议类中的方法并包含设备的状态。

如我所见,有三种实现方式

  1. 让模型类继承协议
  2. 让模型类实现协议
  3. 让模型通过一个属性暴露协议

可能是该协议包含最好不向模型类的实现者公开的方法,该模型类的实现者反对选项 1 和 3。

选项 2 让我可以选择我想从协议中公开哪些内容,但大多数功能只是对协议的调用,例如:

DoSomething()
{
    protocol.DoSomething();
}

你认为什么是“更好”的选择?

NB:将状态和协议解耦的原因是协议不是固定的,可以根据外部因素而改变。

4

2 回答 2

1

你真的需要它们之间的继承关系吗?

interface IDevice
{
    // Some implementation
}

interface IProtocol : IDisposable
{
    void Open(IDevice device, string connection);
    void Close();
    void Send(object data);
    object Receive();
}
于 2013-04-07T19:19:56.253 回答
0

我过去曾使用过我们所谓的命令处理程序设计来处理类似的事情,这就是它的工作原理:

有一个 CommandHandler 类(确实是组件 - 它有几个协作类)完成所有工作(您称为“.DoSomething()”。所以,这与您上面的协议类相同。这个 CommandHandler 类/component 但是,对协议一无所知。他只是使用本地语言构造(在您的情况下为 C# 类/接口)来完成工作。然后,将有一个或多个协议类来完成转换工作语言构造的协议(例如,将 XML 转换为消息类,将二进制字节从流转换为类等)并通过从解码的协议创建其类的实例并将参数传递给这些实例来执行命令处理程序组件的功能来自协议的参数的方法。

要为您的命令处理程序实现新协议,请编写协议类并让它处理您想要的任何协议,让它创建实例并调用其他协议所做的命令处理程序组件的方法,这样核心功能就不会改变。

我希望这就是你要找的。

于 2013-04-07T19:34:38.617 回答