【发布时间】:2018-01-31 09:09:01
【问题描述】:
我目前正在努力设计一个传感器数据的可视化和操作应用程序。我有一个数据库,其中包含几个 STL 容器,其中包含测量数据。
std::unordered_map<std::string, std::array<uint16_t, 3366>> data1;
std::unordered_map<std::string, QImage> data2;
std::unordered_map<std::string, std::vector<Point3D>> data3;
我也有不同的视图(主要基于 Qt),每个视图都应该与特定于其中一个数据集的模型相关联。因此 data1 应该在名为 model1 的类中进行处理和操作,然后通过类 view1 等显示。
但我似乎找不到合适的设计结构来融入这个想法。模型授予对其处理数据的访问权限,但该数据包含在上面给出的不同容器结构中。这使得在基类中使用纯虚函数继承是不可行的,比如
std::map<...,...> getModelData() = 0;
这种继承的最初想法是避免代码重复,但这似乎不是正确的解决方案。我知道 Qt 在他们的“模型视图”概念中利用他们的 QVariant 类在返回类型方面具有最大的灵活性。但是,我想知道,这里使用标准 C++ 的最佳解决方案是什么?我阅读了很多关于努力实现松耦合、代码可重用性、依赖倒置以及如何支持组合而不是继承的内容,但我确实在将这些理论建议付诸实践时遇到了问题,并且大多数时候都会出现代码膨胀和重复代码。你能帮帮我吗?
【问题讨论】:
-
您的代码当前是否有效?你能提供你目前的架构吗?如果所有数据都有不同的视图,那么这样做可能没有什么好处。
-
听起来您的代码执行相同的操作但类型不同(这些类型恰好是容器)。这听起来像是模板的工作。
标签: c++ design-patterns model-view-controller