我目前被分配到开发软件模块以与步进电机控制器通信的任务。该项目是用C#编写的,我有一个C ++ DLL来与控制器通信。通信通过串行端口运行。我打算通过DllImport导入必要的方法在C#中编写整个部分。关键方法看起来像:
ComSendReceive(pHandle, bufferIn,sizeBufferIn,bufferOut,ref bufferOut)
有几种类型的消息:
当然,我需要控制通讯超时。
我的问题是:是否有任何“设计模式”可用于此类问题?我确信这是很多开发人员已经解决的常见问题。
贡献一点 - 我在上一份工作中遇到了类似的问题,我就这样解决了:
我有一个与Com端口通信的类和一个带有一堆重载构造函数的类AT_message:
class AT_Message
{
public bool DoResponseCheck;
public string ExpectedResponse;
public AT_COMMAND command;
public string data;
public bool AddCarriageReturn;
...
//Plenty of ctors
}
class UnfriendlyInterface
{
Response SendMessage(AT_Message msg)
{
//Communicates directly with C++ dll, send message, check timeouts etc....
}
}
我有一个主应用程序正在与之通信的课程,它有人性化的方法,如
class FriendlyInterface
{
bool AutodetectPortAndOpenComm();
Result AnalyzeSignal(byte[] buffer)
{
Response response = UnfriendlyInterface.SendMessage(new Message(AT_Command.PrepareForSignal, (doResponseCheck)true, ExpectedResponse.Ok,Timeout.short);
Response response = UnfriendlyInterface.SendMessage(new Message(buffer,(doResponseCheck)false,Timeout.long);
//.... Other steps
}
//... other methods
}
自从上次我真的很匆忙以来,我实现了第一个出现在我心中的解决方案。但有没有办法做得更好?现在,我正在与之通信的设备比前一个设备更复杂,所以如果有更好的方法,我想这样做。
答案 0 :(得分:0)
这看起来像是一本教科书门面模式。所有这一切的答案都是封装你的变体。例如,尝试为提供确认的命令创建通用接口,并编写客户端代码以使用该接口。然后具体类型可以决定如何将各种确认解释为统一信号(Ok = Complete = Good,或者其他)
这是关于facade pattern的好文章。另请参阅wikipedia article。