【问题标题】:Don't understand the need for $cacheFactory if Factories are singletons如果工厂是单例,则不了解对 $cacheFactory 的需求
【发布时间】:2014-02-05 05:55:13
【问题描述】:

我对 AngularJs 比较陌生,我正在尝试用它构建一个单页应用程序。我的应用程序在内容管理站点中运行。我有 3 个工厂用于用户、组和站点功能。

我对使用 angular 的 $cacheFactory 很感兴趣,但我不确定如果我的数据保留在工厂中会有什么好处,因为它是单例的。

例如,我的用户工厂有一个名为 allUsers 的对象。这个对象通过我的应用程序用于不同的视图。直观地说,它似乎应该被缓存,但我很难理解为什么因为这个对象在用户工厂中,可以从我的任何控制器访问。

【问题讨论】:

  • Angular 中的工厂是为控制器/其他工厂等提供服务的单调对象。 $cacheFactory 是为控制器(或任何其他工厂)提供缓存服务的工厂(意思是服务)对于这个问题)。你可以随意使用这个工厂来缓存对象。
  • K 所以假设我的服务/工厂有一个 allUsers 对象,从 cacheFactory 而不是用户服务/工厂获取该对象有什么好处?
  • 如果您决定缓存您的用户对象,您可能应该使用 UserFactory 从缓存中检索它,而不是直接从控制器中使用缓存工厂。
  • 所以好处就是在我的应用程序中集中对象。与其让我的控制器通过工厂获取对象,它们都可以通过 cacheFactory 并从那里获取它们。
  • 这是一个设计决策。我认为您的控制器应该通过相关工厂访问相关对象。如果您将来决定不使用缓存或使用不同的缓存,您只需更改工厂而不需要更改所有控制器。我是基本的分离。

标签: angularjs singleton factory language-features cachefactory


【解决方案1】:

CacheFactory 是工厂:

工厂方法模式的目的是定义一个用于创建对象的接口,但将对象的实例化推迟到子类。

每次创建其类型的对象时都会创建新实例,这与 Singleton 不同:

单例模式的目的是确保只加载一个类的一个实例,并且该实例提供一个全局访问点。

在 Angular 中,与其他解决方案相比,CacheFactory 具有以下优势:

  • 与控制器作用域不同,缓存可以注入到过滤器中
  • 可以枚举缓存
  • 可以轻松销毁或重新定义缓存
  • 与控制器作用域不同,缓存不与摘要数据绑定绑定
  • 与 cookie 或 localStorage/sessionStorage 不同,缓存与浏览器权限无关

我不确定如果我的数据留在工厂有什么好处

CacheFactory 提供以下功能:

  • '应该创建具有定义容量的缓存'
  • '应该通过 removeAll 清除整个缓存并在满时开始驱逐'
  • '如果操作被链接,应该正确刷新和驱逐项目'

但 CacheFactory 也有以下意想不到的行为:

  • '如果删除了最旧的条目,则应清除下一个条目'
  • '只有在通过 remove 实际删除元素时才减小大小'

参考文献

【讨论】:

    猜你喜欢
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2019-05-22
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多