10

我正在做一个相当复杂的 emberjs 应用程序,并将其绑定到 API 的后端。

API 调用通常不绑定到任何特定模型,但可能会在响应的不同部分返回各种类型的对象,例如,对事件 API 的调用将返回事件,但也会返回媒体资产和参与这些事件的个人。

我刚刚开始这个项目,我想获得一些专家指导,了解如何最好地分离关注点以拥有一个干净的可维护代码库。

我接近这个的方式是:

  • 模型:本质上是处理带有字段和其他计算属性的记录。但是,模型不负责提出请求。
    • 例如个人、事件、图片、帖子等。
  • 商店:它们本质上是缓存。例如, aneventStore会将迄今为止从服务器接收到的所有事件(可能来自不同的请求)存储在一个数组中,并且还存储在由 . 索引的事件的哈希中id
    • 例如个人商店、事件商店等。
  • 控制器:它们与一组相关的 API 调用相关联,例如 eventsController 将负责获取事件或特定事件,或创建新事件等。它们会将响应“路由”到不同的响应以stores供以后检索。一旦发送到商店,他们就不会保留回复。
    • 例如 eventsController、userSearchController 等。
  • 视图:它们与特定视图相关联。一般来说,我的应用程序可能在不同的地方有几个视图,例如latestEventsView在仪表板上,除了有一个单独的事件页面。
  • 模板:就是它们。

很多时候,我的模板需要直接绑定到商店(例如peopleView,想要在一个列表中列出 individualStore 中的所有个人,按某种顺序排序)。

有时,它们绑定到计算属性

alivePeople: function () { ... }.property('App.individualStore.content.@each'),

视图中“选择”的各种过滤和排序选项应该从商店返回不同的列表。您可以在什么是正确的 emberjs 在各种过滤选项之间切换的方式中看到我的最后一个问题?

谁应该做这个过滤,视图本身还是商店?

这种跨层的绑定可以吗,还是有代码味道?关注点分离是好的,还是我错过了什么?控制器不应该在这里做更多的事情吗?我的视图应该直接绑定到商店吗?

MVC 的任何特殊情况更适合我的需求吗?

2012 年 4 月 17 日更新 我的研究还在继续,特别是来自http://vimeo.com/user7276077/videoshttp://jzajpt.github.com/2012/01/17/emberjs-app-architecture.htmlhttp:// /jzajpt.github.com/2012/01/24/emberjs-app-architecture-data.html

我发现的一些设计问题是:

  • 发出请求的控制器(商店或模型或其他东西应该这样做,而不是控制器)
  • 缺少状态图——它们对于视图控制器交互很重要(有时你意识到你的交互不再简单)

这是一个很好的状态图示例:https ://github.com/DominikGuzei/ember-routing-statechart-example

2013 年 1 月 9 日更新

是的,它已经很久了,但是这个问题最近得到了很多观点,这就是为什么我想编辑它,以便人们可以理解。

自从提出这个问题以来,Ember 的环境发生了很大的变化,新的指南也有了很大的改进。EmberJS 已经提出了约定(如 Rails),并且 MVC 现在定义得更好。

任何仍然困惑的人都应该阅读所有指南,并观看一些视频: Seattle Ember.js Meetup

目前,我正在将我的应用程序升级到Ember.js 1.0.0-pre2.

4

3 回答 3

4
  • 您应该根据状态来考虑您的应用程序。看看这个

  • 最初,只需要一个路由和一个模板来描述一些东西并最终在浏览器中显示它,这就是 Emberjs 的新 API 试图强制执行的。随着您的需求变得更加详细,您可以添加视图、控制器或对象。虽然每个都回答了一个特定的需求。

  • 如果您需要处理任何浏览器事件或包装
    您用于动画、样式设置的任何 3rd 方 JavaScript 库,请考虑使用视图。

  • 如果您需要捕获特定于域的
    信息,请考虑使用对象,最有可能模仿后端信息。

  • 控制器只是域对象的代理,可以封装与对象无关的逻辑。

这就是它的全部。如果你学会了如何根据状态来设计你的应用程序,那么其余的都将落入正确的位置,前提是你使用的是最新的 api,并执行我之前提到的规则。

于 2013-01-23T06:35:01.040 回答
3

自从带有新路由器实现的 Ember 1.0.0-pre4 发布以来,我已经看到两个很好的参考资料描述了标准化的 EmberJS 应用程序结构。

熟悉 Rails 的人会发现它相当熟悉。

https://github.com/trek/ember-todos-with-build-tools-tests-and-other-modern-conveniences

http://reefpoints.dockyard.com/ember/2013/01/07/building-an-ember-app-with-rails-api-part-1.html

https://github.com/emberjs/ember-rails上的 ember-rails 项目包含一个 Rails 生成器,用于创建与上述两个链接中描述的结构基本相同的 EmberJS 应用程序目录结构。

EmberJS 指南现在还描述了新的路由结构。http://emberjs.com/guides/

更新 21/08/2013

如果您使用的是 Rails,那么 ember-rails gem 非常棒。我已经成功地使用了它。ember 社区内有两项努力来协助提供标准化的 ember 应用程序布局。显然它们将被合并,但现在检查一下:

https://github.com/rpflorence/ember-tools

https://github.com/stefanpenner/ember-app-kit

于 2013-01-22T08:23:54.627 回答
0

另请参阅此http://addyosmani.com/largescalejavascript/ 它不是特别关于 EmberJs,但它是一篇很棒的文章,让您了解如何编写大规模 javascript 应用程序。

于 2012-04-23T08:14:50.163 回答