我有一个类来处理与某个设备的通信。我给这类协议打了电话。该类不包含任何状态信息,因此我创建了一个模型类,该类应该公开协议类中的方法并包含设备的状态。
在我看来,有三种方法来实现这个
可能是该协议包含的方法最好不向模型类的实现者公开,这与选项1和3背道而驰。
选项2允许我选择我希望从协议中公开的内容,但大多数功能只是调用协议,例如:
DoSomething()
{
protocol.DoSomething();
}
你认为“更好”的选择是什么?
注:状态和协议脱钩的原因是,协议不是固定的,可以根据外部因素变化。
发布于 2013-04-07 19:19:56
你真的需要他们之间的继承关系吗?
interface IDevice
{
// Some implementation
}
interface IProtocol : IDisposable
{
void Open(IDevice device, string connection);
void Close();
void Send(object data);
object Receive();
}
发布于 2013-04-07 19:34:38
我在过去曾使用过我们称为命令处理程序( Command Handler )的设计,它就是这样工作的:
有一个CommandHandler类(实际上是组件--它有几个协作类)完成了所有的工作(您称之为".DoSomething()“)。因此,这与上面的协议类是相同的。然而,这个CommandHandler类/组件对协议一无所知。他只是使用本机语言构造(在您的例子中是C#类/接口)来完成这项工作。然后,将有一个或多个协议类完成将协议转换为语言构造的工作(例如,将XML转换为消息类、从流到类的二进制字节等),并通过从解码协议创建命令处理程序组件的实例并从协议派生的参数向这些实例方法传递参数来执行命令处理程序组件的特性。
要为命令处理程序实现新协议,请编写协议类并让它处理您想要的任何协议,让它创建命令处理程序组件的实例并调用其他协议所做的方法,这样核心功能就不会改变。
我希望这就是你要找的。
https://stackoverflow.com/questions/15866483
复制相似问题