首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该选择哪个选项来公开功能?

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

Stack Overflow用户
提问于 2013-04-07 18:58:05
回答 2查看 71关注 0票数 0

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

在我看来,有三种方法来实现这个

  1. 让模型类从协议继承。
  2. 让模型类实现协议
  3. 让模型通过属性公开协议。

可能是该协议包含的方法最好不向模型类的实现者公开,这与选项1和3背道而驰。

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

代码语言:javascript
运行
复制
DoSomething()
{
    protocol.DoSomething();
}

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

注:状态和协议脱钩的原因是,协议不是固定的,可以根据外部因素变化。

EN

回答 2

Stack Overflow用户

发布于 2013-04-07 19:19:56

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

代码语言:javascript
运行
复制
interface IDevice
{
    // Some implementation
}

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

Stack Overflow用户

发布于 2013-04-07 19:34:38

我在过去曾使用过我们称为命令处理程序( Command Handler )的设计,它就是这样工作的:

有一个CommandHandler类(实际上是组件--它有几个协作类)完成了所有的工作(您称之为".DoSomething()“)。因此,这与上面的协议类是相同的。然而,这个CommandHandler类/组件对协议一无所知。他只是使用本机语言构造(在您的例子中是C#类/接口)来完成这项工作。然后,将有一个或多个协议类完成将协议转换为语言构造的工作(例如,将XML转换为消息类、从流到类的二进制字节等),并通过从解码协议创建命令处理程序组件的实例并从协议派生的参数向这些实例方法传递参数来执行命令处理程序组件的特性。

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

我希望这就是你要找的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15866483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档