我有一个名为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/