model-view-controller - EmberJS : Good separation of concerns for Models, 在相当复杂的应用程序中存储、 Controller 、 View ?

标签 model-view-controller store ember.js separation-of-concerns

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

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

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

我接近这个的方式是:

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

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

    有时,它们绑定(bind)到计算属性
    alivePeople: function () { ... }.property('App.individualStore.content.@each'),
    

    View 中“选择”的各种过滤和排序选项应该从商店返回不同的列表。您可以在 what is the right emberjs way to switch between various filtering options? 看到我的最后一个问题

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

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

    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

    我发现的一些设计问题是:
  • 发出请求的 Controller (商店或模型或其他东西应该这样做,而不是 Controller )
  • 缺少状态图——它们对于 View Controller 交互很重要(有时你意识到你的交互不再简单)

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

    2013 年 1 月 9 日更新

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

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

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

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

    最佳答案

  • 您应该根据状态来考虑您的应用程序。看看this
  • 最初只需要一个路由和一个模板来描述
    一些东西,最后在浏览器中显示,这就是新的
    Emberjs 的 API 试图强制执行。随着您的要求越来越多
    详细说明您可以放入 View 、 Controller 或对象。每个
    虽然回答了特定的需求。
  • 如果您需要处理任何浏览器事件或包装,请考虑使用 View
    您用于动画、样式设置的任何第 3 方 javascript 库..
  • 如果您需要捕获特定于域的对象,请考虑使用对象
    信息,很可能模仿后端信息。
  • Controller 只是域对象的代理,可以封装与对象无关的逻辑。

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

    关于model-view-controller - EmberJS : Good separation of concerns for Models, 在相当复杂的应用程序中存储、 Controller 、 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10118466/

    相关文章:

    model-view-controller - 如何将逻辑排除在 cakephp View 之外?

    php - 何时实现 javascript MVC 框架

    matlab - 在 MATLAB 中存储由 imline 生成的对象的句柄

    extjs - 在 extjs4.1 的服务器端过滤存储

    python - Python 中包含单项组的应用程序布局

    ruby-on-rails - 如何在保存之前在 Rails 3 中手动设置嵌套模型值?

    ExtJS 4.1 : How to combine local data with ajax loaded data in a single store?

    ember.js - Ember 数据 1.0.0 : How does pluralization works?

    javascript - Ember 模板链接

    javascript - Ember JS 中的服务器发送事件