我有一个名为ValidationResult的类,它实现了IValidationReport。这些是通用实体,旨在封装我们拥有的各种验证器的输出。所有验证器均返回IValidationReport

作为标准的设计实践,我们在IValidationReport中仅包含getter,而没有可以操纵返回对象内容的setter或方法。因此,它具有getResult(String filePath)getMessages(String filePath)等,它们返回验证结果,验证消息和指定文件验证的其他信息。

ValidationReport具有addResult(filePath, message, ...)形式的不同重载,该重载针对指定的filePath添加了相应的信息。但是,我们在ValidationReport中也有一种称为addResult(IValidationReport)的方法。此方法本质上是作为合并两个ValidationReport的工作。因此,如果两个验证报告(在其上调用此方法且在一个方法上作为参数传递)具有相同文件的验证信息,则它将被合并。

现在在我们的一个模块中,碰巧我们正在调用两个验证器。两者都具有返回validate()IValidationReport方法。但是我不能将两者合并,因为IValidationReport仅包含吸气剂,而addResult(IValidationReport)。如下:

IValidationReport valrep1 = validator1.validate();
IValidationReport valrep2 = validator2.validate();
valrep1.addResult(valrep2); //cannot do this as valrep1 is IValidationReport and it does not contain addResult(IValidationReport)



所以我该怎么做?我应该在addResult(IValidationReport)中添加IValidationReport吗?但是,这将破坏不向接口添加对象操纵器的设计惯例。
我在哪里弄不好设计?还是我错过了什么?

最佳答案

我认为更好的做法是拥有ValidationResult(IValidationReport ... Reports)构造函数。

ValidationResult valResult = new ValidationResult(validator1.validate(), validator2.validate())


或类似的规定 :)

关于java - 我们是否应该设计包含对象操纵器的接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36334254/

10-10 19:19