为什么把store写成服务的扩展而不是对象更有利?
你应该使用服务
表面上看,Ember.Object
和Ember.Service
之间的区别是表面的:一个布尔值isServiceFactory
,您可以自己设置。
除了ember-cli和ember解析器在使用服务(注入、惰性求值等)时给你带来的好处之外,唯一真正的区别在于你如何从心理上看待这些事情。
对象是泛型的,没有说明它的目的。服务不那么通用。通过调用服务,你告诉自己和其他程序员"这个东西有一个长期存在的状态,在整个应用程序中共享"。具体来说,你是在说,一旦实例化,这个东西的状态就会持续整个应用的生命周期,并且会被多个路由上的路由/控制器/组件使用。
这是一种心理结构,而不是物理结构,但它可以帮助你和其他人更好地概念化应用程序的组织。
Ember.Service
很容易被注入到控制器、路由、组件、mixins和其他服务中。它是惰性计算的,所以只有当你调用这个服务时,例如,通过this.get('store')
,它才会加载存储服务。我们鼓励使用服务而不是全局变量,或者在底层注入javascript对象。