Angularjs Don';如果工厂是单件的,我不理解需要$cacheFactory

Angularjs Don';如果工厂是单件的,我不理解需要$cacheFactory,angularjs,singleton,factory,language-features,cachefactory,Angularjs,Singleton,Factory,Language Features,Cachefactory,我对AngularJs比较陌生,我正试图用它构建一个单页应用程序。我的应用程序在内容管理网站中运行。我有3个工厂用于用户、组和站点功能 我对使用angular的$cacheFactory很感兴趣,但我不确定如果我的数据保留在工厂中会有什么好处,因为它是单例的 例如,我的用户工厂有一个名为allUsers的对象。此对象通过我的应用程序用于不同的视图。直观地看,这似乎是应该缓存的东西,但我很难理解为什么,因为这个对象在用户工厂中,可以从我的任何控制器访问 CacheFactory是一个工厂: 工厂方

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

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


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

CacheFactory
是一个工厂:

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

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

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

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

  • 与控制器作用域不同,缓存可以注入到过滤器中
  • 可以枚举缓存
  • 缓存可以很容易地被破坏或重新定义
  • 与控制器作用域不同,缓存不绑定到摘要数据绑定
  • 与Cookie或localStorage/sessionStorage不同,缓存不与浏览器权限绑定
我不确定如果我的数据留在工厂里会有什么好处

CacheFactory提供以下功能:

  • '应使用定义的容量创建缓存'
  • '应通过removeAll清除整个缓存,并在满时开始逐出'
  • '如果操作链接,则应正确刷新和逐出项目'
但是CacheFactory还具有以下意外行为:

  • '如果删除了最旧的条目,则应清除下一个条目'
  • '应仅在通过remove实际删除元素时减小大小'
参考资料


angular中的Factory是向控制器/其他工厂等提供服务的singltone对象。$cacheFactory是向控制器(或任何其他工厂)提供缓存服务的工厂(即服务)。你可以使用这个工厂来缓存你喜欢的对象。所以让我们假设我的服务/工厂有一个allUsers对象,从cacheFactory而不是用户服务/工厂获取该对象有什么好处?如果您决定缓存您的用户对象,您可能应该使用UserFactory从缓存中检索它,而不是直接从控制器使用缓存工厂。因此,好处就是在整个应用程序中集中对象那么。我的控制器不需要通过工厂来获取对象,它们都可以通过cacheFactory从那里获取对象。这是一个设计决策。我认为您的控制器应该通过相关工厂访问相关对象。如果将来决定不使用缓存或使用其他缓存,则只需更改工厂,而不必更改所有控制器。我是基本的分离。