我很确定有更好的方法来做到这一点,我想得到一些反馈。
组件
我有以下(简化):
- 一个
Item
,它实现IItem
- A
Doodad
,其中包含一个List<IItem>
- 需要一个
IItemExistenceVerifier
接口bool ItemExists(string ItemToCheck)
- A
StandardCachedItemExistenceVerifier
,其中包括一个FillCache(List<IITem> items)
- A
DoodadValidator
接受 anIItemExitenceVerifier
并且有一个Validate
方法调用ItemExists(item)
Doodad 项目列表中的每个项目。
尝试用图表来表达这一点:
目标
- 我想要 a
StandardCachedItemExistenceVerifier
和 aStandardNonCachedItemVerifier
可以传递给 Doodad 验证器
问题/问题
在当前结构中:
- 验证器将收到
IItemExistenceVerifier
并且不知道它是否使用缓存。存在验证器将提前更新,因此我无法创建新验证器并将项目传递到构造函数中)。 - 我不能总是将
FillCache()
其作为验证的一部分调用,因为接口不需要它。
潜在选择
也许我可以:
- 选项 1:
FillCache()
甚至在 the 上实施StandardNonCacheItemVerifier
并且让它什么都不做?(这似乎是一种气味) - 选项2:在验证器中,检查是否
IItemExistenceVerifier
实现了其他接口(ICacheDrivenVerifier
)或其他东西,FillCache()
如果是,则调用?- 选项3:比这两者都聪明的东西。