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