在我的应用程序中,我需要建模与文件系统非常相似的对象之间的关系。
我有Image
,Video
和Collection
集合可以包含所有三种类型的对象。 虽然图像和视频可以是多个集合的一部分,但集合只能包含在一个集合中。
在脊柱中模拟这种关系的最佳方法是什么?
我想做的是从一个通用模型定义中创建所有子类,比如说Asset 所以一切都是资产,我可以在该模型上实现类和实例方法,所有子类模型定义都继承这些方法。
我遇到的这种方法的问题是我需要/喜欢把关系置于资产所以
class Asset extends Spine.Model @configure 'Asset', 'title', 'description' @belongsTo 'collection', Collection
除了我不确定这是否真的有效,如果我有Colletion子类Asset和asset设置对Collection的引用...
这里的问题是belongsTo是单向关系,我只需要集合
所以正确的方法是拥有@hasMany 'collections', Collection
并确保没有集合为此属性设置多个对象
另一个问题是:我可以使用Asset.find(id)来获取属于Asset子类的所有对象吗?
答案 0 :(得分:1)
我不确定你的问题是什么,除了尝试你的上述结构是否有效。
您所描述的内容被称为“复合设计模式”(http://en.wikipedia.org/wiki/Composite_pattern),其中Collection
是'复合',Image
和Video
都是'叶子'
关于您的@hasMany
问题,除了您已定义的@hasMany 'collections', Collection
代码之外,您不希望Collection
子类上的Asset
代替@hasMany 'assets', Asset
:
{{1}}
鉴于你可以在树上上下移动。
同样,我真的不确定这种递归遍历是否适用于Spine(从未尝试过,尽管我广泛使用Spine)
有些人, 吉尔特-扬