我有一个拥有多对多重要资源的数据模型。我们假设我有一个Producer
模型和一个Customer
模块。客户可以从任意数量的生产商处购买,而产品可以为任意数量的客户提供服务。
在后端,我有三个表的标准关系配置:
我的Ember模特目前看起来像这样:
// models/producer.js
import DS from 'ember-data';
export default DS.Model.extend({
customers: DS.hasMany('module'),
});
// models/customer.js
import DS from 'ember-data';
export default DS.Model.extend({
producers: DS.hasMany('module'),
});
现在我正在使用灯具,而我所做的只是使用" target"的ID来定义customers
和producers
数组。问题是,我迟早会切换到真正的REST后端,这意味着我必须处理模型不匹配问题。我想我必须选择:
定义Ember模型customer2producer
。这可能会有效,但我想我将不得不写很多样板,很可能从模型中无法访问这些关系(customer.get('producers')
不能直接使用,我可能要玩和这个问题做同样的事情:
挂钩到序列化器/解串器系统并将后端customer2producer
对象转换为Ember模型引用。我不完全确定这是可能的,但我想说的是快速阅读这些SO问题:
How to save models with many-to-many relationship in Ember.js?
我想这是一种非常常见的情况,我想知道解决问题的最简洁方法是什么。提前谢谢。
答案 0 :(得分:1)
您的数据库不需要映射到REST API。特别是你没有平面数据的限制(这些天你也没有在某些数据库中)。
如果您控制了后端API,我只会返回如下响应:
GET / customers
{
customers: [
{id: 1, producers: [1, 2]},
{id: 2, producers: []},
]
}
GET / producer
{
producers: [
{id: 1, customers: [1]},
{id: 2, customers: [1]}
]
}
您的REST后端应该是关注序列化和反序列化到数据库模型而不是前端应用程序的后端。
如果您有任何消费API无法立即修改(移动应用程序,第三方等),那么无论如何,您的REST API自然会与您的后端模型脱节,从而为您提供数据转换工作。所以我真的想强迫你做一些对REST有意义的事情。