Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 类设计问题,为不同类的用户首选项建模_Design Patterns_Grails_Class Design - Fatal编程技术网

Design patterns 类设计问题,为不同类的用户首选项建模

Design patterns 类设计问题,为不同类的用户首选项建模,design-patterns,grails,class-design,Design Patterns,Grails,Class Design,我不知道如何在我的应用程序中设计几个类。 基本上这是一种情况: 每个用户都可以有许多首选项 每个首选项都可以指不同类别的对象,例如相册、电影、书籍等 首选项表示为一组值,例如分数等。 问题在于,许多用户可能对相同的对象有偏好,例如: John: score=5 for filmid=apocalypsenow Paul: score=3 for filmid=apocalypsenow 当然,我不想在每个用户身上复制对象胶片 因此,我可以创建一个名为preference的类,其中包含一个分

我不知道如何在我的应用程序中设计几个类。 基本上这是一种情况:

每个用户都可以有许多首选项 每个首选项都可以指不同类别的对象,例如相册、电影、书籍等 首选项表示为一组值,例如分数等。 问题在于,许多用户可能对相同的对象有偏好,例如:

John: score=5 for filmid=apocalypsenow 
Paul: score=3 for filmid=apocalypsenow 
当然,我不想在每个用户身上复制对象胶片

因此,我可以创建一个名为preference的类,其中包含一个分数,然后是一个目标对象,类似于:

User{ 
  hasMany preferences 
} 

Preference{ 
  belongsTo User 
  double score 

  Film target   
  Album target 
  //etc 
} 
然后只定义一个目标。 然后,我将为目标类专辑、电影等创建一个界面:

Interface canBePreferred{ 
  hasMany preferences 
} 
并实现所有这些类。 这可能会起作用,但它看起来很难看,需要很多连接才能起作用。 你有没有一些模式我可以用来很好地建模

干杯,
Mulone

首选项与用户和对象都有关系。用户可能会表示一个或多个首选项。可能有一个或多个有关对象的首选项

用数据建模术语来说,用户与首选项之间存在0到N的关系,而对象与首选项之间存在0到N的关系


首选项应该是一个与用户和对象分开的类。

< P>我更喜欢创建一个接口,比如IpReabrabl,我相信Groovy基金会支持GRAILS。我同意首选项应该与用户对象分开,但是如果其他对象有效地表示了您的首选项分类,那么您可以在构建首选项对象图时重用它们。从领域建模的角度来看,您提出的方案没有错,但是用户对象可能变得相当庞大


从坚持的立场来看。。。因为这些只是首选项,所以可以将整个首选项对象图序列化为XML。根据您的数据库引擎,您可以使用SQLXML,这意味着您仍然可以通过XQuery/XPath使用原生XML DOM类型和原生查询支持。这样做不应避免正确的数据库设计,但在某些情况下是合理的。考虑到所有这些,从性能角度来看,反序列化的成本总是更高,尽管转换为JSON对象、元标记结构和其他格式变得更容易。当然还有其他方法可以解决这个问题,但由于您需要其他选择,这只是另外一个选择。

谢谢!是否有一种优雅的方式来模拟与不同类的关系?现在我会和不同的成员一起做这件事:电影目标电影专辑目标音乐等等。。。但这相当丑陋,需要逻辑。有什么想法吗?此外,有可能在Grails中使用接口吗?我找不到医生,抱歉。我是数据建模师,不是Grails开发人员。就您的对象而言,您可以有一个巨大的类,其中包含要建模的所有不同对象的所有元素。在空间上有点浪费,但概念上更简单。或者,您可以有一个基本对象类,定义公共元素,并让您的film和album类分别继承基本对象并定义特定于film和albums的元素。您的数据库表将镜像您的类结构。一个大型对象表,或者一个包含公共元素的基表,以及包含特定于每种对象类型的元素的子表。首选项表将与基对象表建立关系。基本对象表将与其他对象表具有父关系。