我应该选择哪个选项来公开功能?

时间:2013-04-07 18:58:05

标签: c# oop

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

正如我所看到的,有三种方法可以实现这个

  1. 让模型类继承协议
  2. 让模型类实现协议
  3. 让模型通过属性公开协议
  4. 可能是协议包含的方法最好不会暴露给模型类的实现者,这些方法与选项1和3相反。

    选项2允许我选择我希望从协议中公开的内容,但大多数功能只是调用协议,如:

    DoSomething()
    {
        protocol.DoSomething();
    }
    

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

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

2 个答案:

答案 0 :(得分:1)

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

interface IDevice
{
    // Some implementation
}

interface IProtocol : IDisposable
{
    void Open(IDevice device, string connection);
    void Close();
    void Send(object data);
    object Receive();
}

答案 1 :(得分:0)

过去我曾经使用过我们所谓的Command Handler设计,这就是它的工作方式:

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

为命令处理程序实现一个新协议,编写协议类并让它处理你想要的任何协议,让它创建实例并调用其他协议所做的Command Handler组件的方法,以便核心功能不会改变。

我希望这就是你要找的东西。