【问题标题】:Design Pattern: Cache and Context设计模式:缓存和上下文
【发布时间】:2016-02-22 20:03:07
【问题描述】:

关于设计模式的问题。

我有一个DataManager,它使用一个缓存DataCache,它对给定的上下文(在我的例子中是一个日期)有效。

我的DataCache 是否应该存储缓存数据有效的上下文,或者最好只留给DataManager 知道何时需要重置DataCache?我觉得在缓存中也有上下文意味着更多不必要的维护,但也许有一个很好的理由把它放在那里。

一个小问题,但想知道这里的最佳做法是什么。

例子:

public class DataManager {
    DateTime context;
    DataCache cache;
}

public class DataCache {
    Dictionary dict;
}

public class DataManager {
    DateTime context;
    DataCache cache;
}

public class DataCache {
    DateTime context;  // note that we store the context here as well
    Dictionary dict;
}

【问题讨论】:

    标签: java design-patterns dependency-injection


    【解决方案1】:

    如果DataCache 可以在内部使用上下文来知道它是无效的或重置自己或其他什么,它应该存储它。这里的设计重点是让类(这里是 DataCache 类)的用户更简单、更安全,而不是减少类的内部工作。

    根据使用上下文的方式,它只能存储在DataCache 中,而DataManager 可以使用getter 访问它。

    【讨论】:

    • 所以答案是“最有意义的”
    • @gdbj 更多的是“用户至上”,但“最有意义的事情”也是一个很好的座右铭,即使在编程之外:-)
    【解决方案2】:

    缓存的职责是在数据过期时使数据失效,因此理想情况下,数据缓存应该跟踪上下文并使其失效。 DataManager 应该查询缓存,如果缓存没有数据,它应该获取数据并更新缓存。

    【讨论】:

      【解决方案3】:

      如果没有Context 不存在DataCacheContext 可以是Cache 的一部分。

      您正在创建DataManagerDataCache 之间的依赖关系。

      DataCache 替换为接口IDataCache,以便提供松散耦合。您可以在未来使用不同的类更改 Cache 实现。

      看看这些 SE 问题:

      What is dependency injection?

      Inversion of Control vs Dependency Injection

      【讨论】:

        猜你喜欢
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 2021-04-23
        • 1970-01-01
        • 2010-10-20
        • 1970-01-01
        • 2010-11-02
        相关资源
        最近更新 更多