繁体   English   中英

骨干关联与骨干关系

[英]Backbone-associations vs Backbone-relational

我一直在寻找有关如何在Backbone中建立关系的信息,并且遇到了以下两个不错的插件:

两者似乎都存在了两年多,似乎很稳定。 但是, Backbone-relational比以下术语中的Backbone-associations更胜一筹:

  • 像我们在数据库中一样提供几乎所有的关系,如one-to-one, one-to-many, many-to-one
  • 好的文档(类似于Backbone.js )乍一看

既然,我没有时间广泛浏览这两个插件,我想从有经验的人那里了解下面的事情:

  • 两者都支持AMD(如Requirejs )吗?
  • 使用Ruby on Rails等后端服务器的插件有多容易?
  • 实现多态关系有多容易?

最大的区别在于Backbone-relational fobids使用相同的id创建相同模型的多个实例。 考虑:

let Person = Backbone.RelationalModel.extend({
    relations: [
        type: Backbone.HasMany,
        key: 'likes_movies',
        relatedModel: 'Movie'
    ]
});

let peter = new Person({
    likes_movies: [{id: 1, title: 'Fargo'}, {id: 2, title: 'Adams Family'}]
);

let john = new Person({
    likes_movies: [{id: 1, title: 'Fargo'}, {id: 2, title: 'Adams Family'}]
);

// Change title of one of Peter's movies
peter.get('likes_movies').get(1).set('title', 'Fargo 2 (Sequel)');

// John's corresponding movie will have changed its name
console.log(john.get('likes_movies').get(1)); // Fargo 2 (Sequel)

如果重写为Backbone-associations ,John的电影标题就不会改变。 这可以被视为一个特征或缺点,取决于你如何看待它。

除此之外,两个库都非常相似,只是Backbone-associations开发似乎已经在一年前停止了。

实际上,基于GitHub脉冲(活动指标),Backbone-relational社区似乎更加活跃。

当我在寻找像EmberData或Restangular for Backbone这样的东西时,我研究了这两个库。

这两个库都试图弥补主要的Backbone弱点:正确处理Rest API Restful Resources。
事实上,Backbone每次需要渲染时都会促进新模型的创建(而不是重复使用在应用程序的其他位置进行其他渲染的实例)。
然后会出现一些不一致,因为某些模型更新不会在Web应用程序的任何位置传播。
然后需要骨干模型实例的缓存.Backbone Relational提供这样的缓存,但Backbone Association不提供。

此外,两者都重新实现了Backbone的代码方法(set,get,reset,trigger),因此它们与Backbone紧密耦合。
这可能会使Backbone库迁移变得复杂,特别是如果你在Backbone之上使用另一个MVC框架(Marionnette,Thorax,Chaplin,...)

在代码行方面,Backbone Association比Backbone Relational更轻(800 vs 2000)。

  • Backbone Association实现更容易调试,因为它直接管理重载方法的关系(set,get,...)
  • 相反,Backbone Relational依赖于队列来将关系内容与其内部存储同步。 这使调试变得棘手......

另一个轻量级(但使用较少)替代品是“Backbone SuperModel”: http ://pathable.github.io/supermodel/

  • 这个库比800线代码更容易理解,比Backbone Relational(我能够自己修复一个小bug)。
  • 它提供了基于Backbone Collection的骨干实例缓存

在我身边,

  • 我成功地将最后一个与RequireJs集成在一起
  • 我管理一些多态关联
  • 我的web应用程序和我的Java后端之间出现了一个协议
  • 我每次需要时都成功升级Backbone和Marionette

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM