如何在添加接口和添加属性之间进行选择

问题描述

在我们的项目中,我们使用CQS模式。由于某些查询调用了其他Web服务(在我们的情况下可能很慢),因此我们希望缓存这些结果。现在,我找到了几种解决方法

  1. 创建一个从Query对象继承的CachedQuery。
  2. 查询处理程序添加“ CacheResult”属性,让装饰器检查该属性的存在性
  3. 查询添加“ CacheResult”属性,进行装饰检查以检查该属性的存在
  4. 实现“ ICacheableQuery”接口,并进行装饰检查以检查此接口的实现。

由于“继承之上的构成”而放弃了选项1

选项2并不是很灵活,例如无法缓存

但是如何在3和4之间选择呢?添加属性不是继承(还是继承?),因此是相等的。至少到目前为止,两者都足够灵活。

我想念一些令人信服的论点吗?还是个人喜好,如果是这样,您会选择做什么?

解决方法

添加属性不是继承(或者是继承)

是否要继承自定义属性取决于您的实现。当您编写用于检查属性是否存在的代码时,可以编写该代码,以便它也可以检查该属性的基类/接口。

正如评论者已经指出的那样,属性使您可以添加元数据,这些元数据根据您要实现的内容可能很有用。

通常,我不喜欢仅出于区分类型而没有方法的接口。但是最后...

这是个人喜好问题

是的

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...