java - 如何创建一个扩展两个其他接口的接口以在 java 中定义类型
问题描述
我有两个接口Inquiry
,Validatable
我也有两个类ErrorReport
和FunctionQuery
实现Inquiry
,Validatable
两者都有。
当我有一个使用两个接口操作组合的逻辑时,最好的选择是什么?我知道我可以使用Inquiry
and将它分成两个逻辑Validatable
,但是逻辑是组合的,所以如果我将它分开,它会产生其他重复。
我尝试如下,但是,我意识到这种层次结构是不合适的,因为Validatable
它不是Inquiry
我的应用程序的概括。
首先接近
public interface Inquiry extends Validatable {
...
}
和这样的课程。
public class ErrorReport implements Inquiry{
...
}
public class FunctionQuery implements Inquiry {
...
}
新的方法
所以我创建了一个如下所示的界面。
public interface ValidatableInquiry extends Inquiry,Validatable{
...
}
和班级
public class ErrorReport implements ValidatableInquiry {
...
}
public class FunctionQuery implements ValidatableInquiry {
...
}
我认为新方法比第一种方法更好,但我不能放心。这是正确的方法吗?还有更好的选择吗?
解决方案
在某种程度上,这是自以为是。两种解决方案都适用于生命周期有限的小型项目。
但是很明显,第一个解决方案带有一个重要的约束:它引入了 和 之间的Inquiry
耦合Validatable
。
因此,答案是:如果您真的确定您的“模型”,以及您想要创建的抽象......在某种意义上:是的,绝对地, anyInquiry
也将永远是 a Validatable
,那么这个解决方案是可以的。因为您的代码与您的心智模型相匹配,并且您确信您的心智模型的有效性。
但是如果对这两个接口实际上是相互独立的有一点怀疑,那么你应该选择第二种方法。因为这种方法说:这两个接口是独立的,需要这两种功能的类可以从将功能组合在一起的连接接口扩展。
推荐阅读
- mongodb - 保存后使用猫鼬精益
- google-sheets - 如何在 Google 表格中找到现有图表的图表 ID?
- android - 将 JSON 反序列化为包含对另一个反序列化对象的引用的类型
- javascript - 如何使用 ES6 语法将 winston 错误处理与 express-async-errors 一起使用?
- css - 在物化轮播中使中间项处于活动状态
- express - 验证提交的表单并优雅地显示错误
- html - Boostrap 4 Scroll Spy 活动类没有改变
- javascript - 我可以使用 JsonEditor 来编辑 JSON 模式吗?
- c# - 如何将 Automapper 与 ASP.NET Core 2.2 API 一起使用
- python - 如何在 Python 中实现这个 R 泊松分布?