我正在调查个人Grails项目,并希望将域模型放在一起以表示产品目录。我真的不能决定最好的方式去做。虽然许多类别只有一组基本属性(所有类别之间共享)(例如,产品名称,产品说明,价格等),但我将拥有许多不同的产品类别。但是,一些产品将具有特定于其类别的其他属性。在Grails中建模产品目录模型
我已经研究了实体属性值(EAV)模型技术,它提供了一个非常可扩展的解决方案。而且,我已经考虑了使用显式OO继承模型的路线,其中我有一个基类Product类的子类来表示具有附加属性的任何产品。
显然,第二种方法的扩展性较差 - 添加新的产品类别需要一个新的实体,并且可能需要前端的自定义视图/编辑器。不过,作为一名开发人员,我认为编程模型更加清晰,并且更符合代码编写的逻辑。
EAV方法将允许动态扩展性,但会导致更隐蔽的编程模型,并会在DB(复杂表连接)中产生性能开销。前端的视图/编辑器可以动态生成,以包含产品类别的任意数量的自定义属性 - 尽管我确信会出现这种动态生成不足以满足可用性角度的情况。
当我考虑像Grails这样的框架时,似乎有必要沿着创建显式继承模型的路线走下去。我不相信像Grails这样的框架能够很好地适应EAV方法 - Grails的很多好处都会在复杂性中丧失。但是,我不确定这种方法会随着产品类别数量的增加而实际扩展。
我真的很想听听其他人对这种建模挑战的体验!
谢谢,这里有一些非常有用的想法。我感觉继承路线感觉更舒适。就像你的情况一样,我不认为实体的数量会达到成为问题的程度。 – DrewEaster 2010-12-06 15:15:40