Ember Objects和Ember Data之间的区别是什么?我知道当服务器上有一些数据时我应该使用Ember Data模型,但是我应该在何时何地使用它们?
答案 0 :(得分:31)
注意:这是相当长的,有偏见的,代表了我对此事的看法。可能不是答案。
类型Object
是您可以称之为"简单" Ember中的对象类型。它具有您可能在现代应用程序(如计算属性和可观察对象)中使用的基本功能。并且它与运行时结合它还允许绑定,过滤等。我将其称为通用对象,可以扩展为创建其他类型,也可以与mixins结合以进一步增强其使用。它有很多但有限的功能,但我不会称之为后端友好,只是因为我知道DS.Model
及其功能。
Ember-Data' DS.Model
大量扩展了Object
中的功能,以便在(大多数情况下)RESTful环境中处理后端数据时提供更多有用的功能。就像ORM支持的对象(例如:.NET的EntityFramework或Ruby的ActiveRecord),它提供了一组功能,因此可以通过以下方式管理该类型的对象(DS.Model
)数据存储(DS.Store
),除了Object
中已有的功能之外,它还允许状态管理(isDirty
,isNew
,isError
,{{ 1}}等等,isNew
和commit
的能力以及商店中的对象(以及随后的后端API),关系/关联等。
如果您正在使用Ember-Data,则应使用类型rollback
,因为它(旨在与商店一起使用,并且)在侧载,关联,复数和整个过程中使用模型类型整个AJAX请求/响应工作流程。实际上,使用由Model
支持的Model
的优势之一就是:让框架通过自己构建正确的RESTful资源的AJAX请求来完成繁重的任务,管理响应,将JSON有效负载的侧载加载到正确类型的对象中,同时为您提供 promise ,您可以在请求/处理/实现数据时使用该模型(这样您就可以转换发生这种情况时的意见/路线)。
它还为商店支持的对象本身提供了大量方便的功能(例如:Store
),并且在一天结束时,我们可以提高工作效率,并且可以更快地构建应用程序。
有了这样的说法,有人批评这种方法,因为大量的开发人员通常不喜欢或不会诉诸于人们称之为 technomagic 的东西;换句话说,他们不喜欢使用它,因为他们觉得他们并非100%控制引擎盖下发生的事情。在我个人看来,同时我可以看到这些人来自哪里,我相信Ember-Data没有帮助我提高工作效率,而且它要求的唯一事情就是我与我的代码和我遵循某些惯例,并对此感到高兴。
返回record.deleteRecord(); store.commit()
,如果您不使用Ember-Data,则应使用Object
类型作为模型。这意味着您将手动完成所有这些任务(通常不是很重要)。因此,您必须手动创建AJAX请求,处理响应,将响应数据加载到对象中,并基本维护客户端应用程序和API之间的所有通信工作流程。优势在于你将100%掌控,但需要更多努力,如Robin Ward所述here。您仍然可以使用路由API和使Ember成为现实的大多数强大功能。
因此,何时以及在何处使用这些类型的问题实际上取决于您在后端的架构以及您对此的灵活程度。
对于每个人来说,这不是一个可以有明确答案的东西,但可以通过回答几个问题来处理,这些问题将评估使用Ember-Data的可行性(从长远来看)。
在回答这些问题后,考虑开发迭代和生命周期;想想从长远来看用两种方法来维持它需要什么;并且还要考虑社区在决定其架构和/或发展战略时采用的other people路径。
在一天结束时,您必须了解这些对象在功能方面带来了什么,以及您是否需要它们来构建应用程序。恕我直言,Ember-Data是大多数情况下的方法,它只能在我们接近(可能是RC3,然后是Ember 1.0 final)时变得更好,这可能包括Ember-Data作为包的一部分。
我希望这可以提供帮助