我很确定有更好的方法来做到这一点,我想得到一些反馈。
组件
我有以下(简化):
- 一个
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:比这两者都聪明的东西。