将数据保存到文件 - 什么对象应该负责?
Saving data to file - What object should be responsible?
上下文:
我正在编写一个程序来识别可能冗余的测试用例。
我正在使用 AspectJ
跟踪每个测试调用路径并基于此构建调用上下文,在测试完成后我对此进行分析并生成结果。
根据所需的算法和调用上下文级别,将更改分析阶段所花费的时间。但是,测试阶段是一致的,并且由于 AspectJ
必须跟踪每个方法调用,因此通常需要超过 60 分钟。
我发现解决这个问题的一种方法是保存测试结果 运行,因此我可以简单地 运行 我对这些数据的新分析而不是重新 运行宁。节省我自己的时间并允许我在更大的基准测试上执行测试,例如 Spring
或 Ant
.
目前,我正在使用 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负责生成数据,而另一个负责保存和检索数据。任何人都不应该知道或关心另一个人实际上是如何做到的。
上下文:
我正在编写一个程序来识别可能冗余的测试用例。
我正在使用 AspectJ
跟踪每个测试调用路径并基于此构建调用上下文,在测试完成后我对此进行分析并生成结果。
根据所需的算法和调用上下文级别,将更改分析阶段所花费的时间。但是,测试阶段是一致的,并且由于 AspectJ
必须跟踪每个方法调用,因此通常需要超过 60 分钟。
我发现解决这个问题的一种方法是保存测试结果 运行,因此我可以简单地 运行 我对这些数据的新分析而不是重新 运行宁。节省我自己的时间并允许我在更大的基准测试上执行测试,例如 Spring
或 Ant
.
目前,我正在使用 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负责生成数据,而另一个负责保存和检索数据。任何人都不应该知道或关心另一个人实际上是如何做到的。