パフォーマンスの問題により、一部の C++ コードをリファクタリングしようとしていますが、これを解決する最善の方法を考えています。大規模システムのコア コンポーネントである DataGatherer というクラスがあります。このクラスはシリアル化されてデータ ストリーム経由で送信され、コピーされてテーブルに格納され、同時実行のためにコピーされます (元の DataGatherer オブジェクトにアクセスするのではなく、コピーをチェックアウトします)。コピー演算子と代入演算子の両方が使用されていることを知らせるために、例をリストします。
問題は、DataGatherer オブジェクトが非常に大きくなる可能性があることです。これらのオブジェクトには、収集されたデータの大量のコレクションと、データに関する統計およびメタデータが本質的に含まれているためです。多くの場合、必要なのは統計とメタデータだけであり、バックエンド データ コレクションは必要ありません。
ここで役立つ設計パターンはありますか? おそらく、より一般的な質問は、ほとんどの場合、オブジェクトの一部しか必要としないのに、オブジェクトが内部で非常に緊密に結合されているため、分割がほぼ不可能な場合はどうするかということです。
私が思いついたアイデア、
クラスを DataGatherer クラスと DataGathererBackend オブジェクトへのポインターに分割します。DataGathererBackend が使用されていないときに DataGathererBackend をコピーするすべてのオーバーヘッドを回避するために、ほとんどの場合、浅いコピーを返します。浅いコピーが必要な場合と深いコピーが必要な場合の処理のすべての面倒と、バックエンド オブジェクトの NULL ポインターを持つ DataGatherer オブジェクトに頼らなければならない一般的な厄介なフォームがあるため、これを行うのは嫌いです。それらの場合に必要です。
クラスを DataStatistics と Data に分割し、両方をラップして含む 3 番目のクラスを作成します。
他のアイデア?