Java 设计模式:缓存和上下文
关于设计模式的问题 我有一个Java 设计模式:缓存和上下文,java,design-patterns,dependency-injection,Java,Design Patterns,Dependency Injection,关于设计模式的问题 我有一个DataManager,它使用一个缓存DataCache,该缓存对给定的上下文(在我的例子中是一个日期)有效 我的DataCache是否应该存储缓存数据有效的上下文,还是最好让DataManager知道何时需要重置DataCache?我觉得在缓存中也有上下文意味着更多不必要的维护,但也许有一个很好的理由将其放在缓存中 这是一个小问题,但我想知道这里的最佳实践是什么 例如: public class DataManager { DateTime context;
DataManager
,它使用一个缓存DataCache
,该缓存对给定的上下文(在我的例子中是一个日期)有效
我的DataCache
是否应该存储缓存数据有效的上下文,还是最好让DataManager
知道何时需要重置DataCache
?我觉得在缓存中也有上下文意味着更多不必要的维护,但也许有一个很好的理由将其放在缓存中
这是一个小问题,但我想知道这里的最佳实践是什么
例如:
public class DataManager {
DateTime context;
DataCache cache;
}
public class DataCache {
Dictionary dict;
}
或
如果
DataCache
可以在内部使用上下文来知道它无效或重置它自己或其他什么,它应该存储它。这里的设计重点是让类(这里是DataCache
类)的用户更简单、更安全,而不是减少类的内部工作
根据上下文的使用方式,它只能存储在
DataCache
中,DataManager
可以使用getter访问它。缓存负责在数据过期时使其失效,因此理想情况下,数据缓存应该跟踪上下文并使其失效。DataManager应该查询缓存,如果缓存没有数据,它应该获取数据并更新缓存 Context
可以是Cache
的一部分,前提是Context
不存在而没有DataCache
您正在DataManager
和DataCache
之间创建依赖关系
用接口IDataCache
替换DataCache
,以便提供松耦合。将来可以使用不同的类更改缓存
实现
看看这些问题:
所以答案是“最有意义的东西”@gdbj这更像是“用户至上”,但“最有意义的东西”也是一句很好的座右铭,即使是在编程之外:-)
public class DataManager {
DateTime context;
DataCache cache;
}
public class DataCache {
DateTime context; // note that we store the context here as well
Dictionary dict;
}