0

我正在开发一个应用程序,其最低层由输入输出通信设备(例如串行端口)组成。

为了以最少的努力实现更有价值的工具,相邻层应不受通信介质(例如以太网或 USB)变化的影响。如果我没记错的话,这声称使用了依赖倒置原则等。我看过一些例子。

class DataIOClient
{   
public:
DataIOClient(void){}
~DataIOClient(void){}

virtual void WriteData(DataIOClientData* data) = 0;
virtual void ReadData(DataIOClientData* data) = 0;
};

该接口及其相应的实现(取决于所选的通信架构)应该将我的上层与通信层解耦。

但是,我遇到了初始化的问题。由于每种架构都需要不同的初始化参数(例如,COMPort 中的 9600 8N1 或以太网中的 192.168.1.2 或并行端口通信的 LPT1),我无法弄清楚依赖方案或底层抽象以使其可行。

如果 DataIOClient 先验地“知道”实现请求的输入参数,它将被耦合并且不再依赖倒置,对吗?我有一种模糊的感觉,我没有正确理解这个原则的正确应用。

谢谢

4

1 回答 1

2

在我看来,文本配置文件和参数应该可以工作;您解析配置并调用合适的工厂函数:

.config:

IOClient = { type = "ethernet", config = { host = "12.34.56.78", port = "8080" } }

IOClient = { type = "usb", config = { } }

IOClient = { type = "serial", config = { device = "/dev/modem" } }

创建者.cc:

item = read_tuple("IOClient");

std::unique_ptr<DataIOClient> = factory.create(item["type"], item["config"]);
于 2013-06-10T12:46:32.647 回答