将数据保存到文件 - 什么对象应该负责?

Saving data to file - What object should be responsible?

上下文:

我正在编写一个程序来识别可能冗余的测试用例。

我正在使用 AspectJ 跟踪每个测试调用路径并基于此构建调用上下文,在测试完成后我对此进行分析并生成结果。

根据所需的算法和调用上下文级别,将更改分析阶段所花费的时间。但是,测试阶段是一致的,并且由于 AspectJ 必须跟踪每个方法调用,因此通常需要超过 60 分钟。

我发现解决这个问题的一种方法是保存测试结果 运行,因此我可以简单地 运行 我对这些数据的新分析而不是重新 运行宁。节省我自己的时间并允许我在更大的基准测试上执行测试,例如 SpringAnt.

目前,我正在使用 Ant 对 junits 进行批测试。

我有一个被方面调用的服务,它简单地保存每个测试的所有方法调用,这是在完成后由一个对象提取然后分析的。

问题:

谁应该负责将这些数据保存到磁盘?应该是从服务中提取数据的对象、服务本身还是将使用该服务的另一个对象?

tldr:

保存数据的对象应该负责保存吗? 或者它应该是另一个对象?

您肯定希望保存与存储无关。我建议对存储进行(单独的)抽象,然后实现它。这样(特别是如果你想 运行 对数据进行不同类型的分析)你可以调整数据持久性和检索的性能,与生成数据分开。

更精确一点:我建议您的方面调用的服务实际上应该使用单独的存储服务:

public interface AnalysisDataStorageService {

      public void save(AnalysisDataObject o); 

      public List<String> getPackageNames(String match);

      public List<String> getClassNames(String match);

      public List<AnalysisDataObject> get(
           String packageNameFilter,
           String classNameFilter,
           int paramterCountFilter,
           Clazz parameterTypeFilter,
           Integer executionTimeOverFilter,
           Integer executionTimeUnderFilter);
 }

在这种情况下,一个class负责生成数据,而另一个负责保存和检索数据。任何人都不应该知道或关心另一个人实际上是如何做到的。