gpt4 book ai didi

java - 我们是否应该设计包含对象操纵器的界面

转载 作者:行者123 更新时间:2023-12-02 03:45:41 24 4
gpt4 key购买 nike

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

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

ValidationReport 具有 addResult(filePath, message, ...) 形式的不同重载,它针对指定的 filePath 添加相应的信息。不过,我们在 ValidationReport 中还有一种名为 addResult(IValidationReport) 的方法。此方法本质上相当于合并两个 ValidationReport。因此,如果两个验证报告(调用此方法的验证报告和作为参数传递的验证报告)具有同一文件的验证信息,那么它将被合并。

现在在我们的一个模块中,我们碰巧正在调用两个 validator 。两者都有返回 IValidationReportvalidate() 方法。但是,我无法合并两者,因为 IValidationReport 只包含 getters,但 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 - 我们是否应该设计包含对象操纵器的界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36334254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com