设计:分离数据及其视图

exc*_*ray 5 c++

我想重构一些遗留代码.

通过读取一些寄存器可以获得一些数据.此数据以csv和xml文件表示.

目前的方式很脏.数据和视图(XML,CSV)之间没有分离.实际上,对于每种格式,每次都会完成数据收集.

为了给你一张照片,它目前是这样的:

A::Timestamp()
{
  //does some data collection and dumps to csv file
  //the header for this csv file is built in PreTimeStamp function.
  //depending on some command line options certain cols are added.
  filehndle << data1 << ","<<data2<<"," << data3;

  if( cmd_line_opt1 )
  {
    filehndle << "," << statdata1 <<","<<statdata2;
  }
} 

A::PreTimeStamp()
{
  //header for csv file
  filehndle << "start, end, delta";
  if( cmd_line_opt1 )
  {
     filehndle << "," << "statdata1 , statdata2";
  }

}
Run Code Online (Sandbox Code Playgroud)

还有另一个类B :: Profile(),它以与A :: Timestamp相同的方式进行数据收集,但数据被转储为XML.

我想重构它以使数据收集在一个共同的地方.并使用csv和xml的一些适配器来获取数据并以该格式转储它.

现在我需要一些关于我可以用来表示数据的模型的帮助.收集的数据不是固定的,所以我不能模拟它struct或一些静态类型.添加到csv文件的cols取决于命令行选项.

接下来的帮助我可以将像xmlWriter和CsvWriter这样的类插入到这个数据模型中吗?

use*_*736 2

我建议为此使用策略模式。在“Dumper”接口中,TimeStamp 和 PreTimeStamp 声明将是纯虚拟的(即 virtual void Timestamp() =0),并且 Dumper_A 和 Dumper_B 实现将被声明为虚拟的。然后,加载数据的类将被分配适当的 Dumper 实现来处理数据的转储。