【发布时间】:2012-10-01 14:23:01
【问题描述】:
由于性能问题,我正在尝试重构一些 C++ 代码,我想知道解决这个问题的最佳方法。我有一个类说 DataGatherer,它是大型系统的核心组件。此类被序列化并通过数据流发送,复制并存储到表中,为了并发而复制(签出副本而不是访问原始 DataGatherer 对象)。我列出示例只是为了让您知道它具有同时使用的复制和赋值运算符。
问题在于 DataGatherer 对象可能会变得非常大,因为它们本质上包含大量收集的数据以及有关数据的统计信息和元数据。在许多情况下,只需要统计数据和元数据,而不是后端数据收集。
这里有什么设计模式可能有用吗?也许更普遍的问题是,在大多数情况下您只需要一个对象的一部分,但该对象内部耦合如此紧密以至于几乎不可能将其拆分时,您会怎么做?
我的想法,
将该类拆分为一个 DataGatherer 类和一个指向 DataGathererBackend 对象的指针。在大多数情况下返回浅副本以避免在不使用 DataGathererBackend 时复制它的所有开销。我讨厌这样做,因为当你想要一个浅拷贝和你想要一个深拷贝时处理所有的麻烦,而且只是一般的混乱形式不得不求助于后端对象具有 NULL 指针的 DataGatherer 对象,因为它不是在这些情况下需要。
将类拆分为 DataStatistics 和 Data,并创建一个包装并包含两者的第三个类。
其他想法?
【问题讨论】:
-
创建作为接口实现的对象“视图”怎么样?这些接口只能作为工厂的前端。
标签: c++ oop design-patterns architecture software-design