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

时间:2015-05-20 01:14:01

标签: java junit architecture

上下文

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

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

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

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

目前,我正在使用Ant批量测试junits。

我有一个由方面调用的服务,只是为每个测试保存所有方法调用,这是在完成后由对象提取然后进行分析。

问题:

谁应该负责将此数据保存到磁盘?它应该是从服务,服务本身或将使用该服务的其他对象中提取数据的对象吗?

tldr:

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

1 个答案:

答案 0 :(得分:3)

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

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

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);
 }

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