【问题标题】:Are Backbone models supposed to be view-model, domain-models or both?骨干模型应该是视图模型、域模型还是两者兼而有之?
【发布时间】:2012-07-23 15:34:10
【问题描述】:

对不起,如果问题含糊不清,但我真的很难找到这方面的信息。我来自 Flex/ActionScript 世界,在大多数情况下,我们有非常简单的值对象 (VO) 来表示诸如用户或地址之类的东西,并且我们有通常表示这些 VO 的集合以及业务逻辑的模型。有一些框架会包含一个视图模型,MVVM。我知道做这些事情没有“正确的方法”,但我似乎无法指出基础知识。

是否所有 Backbone 视图都应该有自己的模型?鉴于我可能没有名为“用户”的视图,我是否还包括域模型?

文件夹会是这个样子吗?

  • 应用程序
    • 型号
        • 用户
        • 地址
      • 查看
        • 用户配置文件模型
    • 查看次数
      • 用户资料查看
    • 集合
      • 用户

再次抱歉,如果这没有意义或过于笼统。我只是想了解 JS 世界在 MVC 模式方面已经走了多远。谢谢。

【问题讨论】:

    标签: javascript backbone.js models


    【解决方案1】:

    我认为这里没有唯一的答案。每个案例都会有答案。

    是否所有 Backbone 视图都应该有自己的模型?

    没有。

    会有Views引用一个Model,其他的引用一个Collection。还有一些视图会引用多个模型,而其他视图则根本不会引用非模型。

    视图是一个用户界面。它向用户显示数据并监听用户在此数据表示上触发的事件。

    例如,如果我有一个名为 Friend 的模型,并且我想创建一个界面来列出一堆这样的模型,我将拥有:

    • FriendsView:这是一个View,代表朋友的集合。
    • FriendView:这是 FriendsView 的 子视图,它只代表一个朋友。它还可以在 destroy 按钮上收听此好友的 click

    但我还想在我的服务器中创建一个表单来从好友中搜索:

    • FriendSearchView:不引用任何模型或集合。但是正在监听用户填写 input 字段。

    我还要包括域模型吗?

    我不知道您对 域模型 的含义是什么,但如果您询问将 业务逻辑 放在哪里,Backbone 对此非常不可知。我建议将尽可能多的计算放入模型或集合中。您也可以使用自己的纯 JS Util 库。

    保持视图干净。仅响应用户事件并根据需要调用模型和集合方法。还会监听从中显示数据的模型或集合的变化。

    文件夹应该是什么样子?

    嗯,Backbone 再次对此不可知论。有很多关于这方面的文献。

    我的项目过去很小,不到 30 个文件。我将它们全部放在同一个文件夹中,命名对流如下:

    • 朋友
    • 朋友
    • 好友视图
    • FriednsView

    【讨论】:

    • 感谢您深思熟虑的回复。许多示例和教程都假设每个视图都有一个模型。您描述/使用模型的方式也是我设想它们的方式,因为它们代表现实世界的业务实体或“域模型”。但是,也可以有一个“视图模型”,它表示单个视图需要渲染/运行的所有数据和方法。但是,您的 Friend 模型是否不能同时具有 FriendsView 和 FriendView 的逻辑,即使该逻辑可能特定于其中一个?你遇到过这个问题吗?
    • @TonySmith 如果逻辑与作为集合的 Friends 更相关,我宁愿将逻辑放在 Backbone.Collection 中。例如:filters,或任何元素批量操作。在此之后,我们可以开始研究更具体的例子。
    • 好的。老实说,我还没有真正研究过集合在 MVC 架构中所扮演的角色。我会检查一下,但你给了我足够的东西让我开始。谢谢 fguillen。
    • @TonySmith 不要尝试将 MVC 的学术描述与 Backbone 范式相匹配。它们都不太匹配 :)。但可以肯定:开始玩吧,它会来找你的。
    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多