首页 新闻 搜索 专区 学院

这样的关联如何做合适?

0
悬赏园豆:50 [已解决问题] 解决于 2008-12-20 17:04

产品的评论需要显示产品名,而在数据库中只保存了产品的Id。实在评论的类中加入产品名字段,并在数据库的查询中一起查询出产品名合适。还是在评论组合产品类。

如果是第一种方法的话使用产品名只要Comment.ProductName就可以。

而第二种方法则要Comment.Product.Name才行。

一般应该使用哪种方法?

HelloCode的主页 HelloCode | 初学一级 | 园豆:150
提问于:2008-12-16 15:40
< >
分享
最佳答案
0

我觉得第一种方式比较直接一些,因为第二种方式的话,还得初始化一个product,而我们实际上只需要一个productname,那这里无疑是浪费了不少的性能

不过,我觉得还有更好的办法,无论在哪里显示评论,在同时你一样得显示出评论对应的商品,所以comment似乎更应该是这种方式使用的:Product.Comment,在这种情况下,先有 product后有comment,自然也就不存在上面的问题了

如果不这样用,也可以直接Comment.xxx/Product.Name,还是上面那个理由,在出现评论的地方,对应的产品总是应该出现的吧?所以Product类一样在Comment类之前初始化了,照样可以用 Product.Name,而不一定非得让productname和comment产生什么关联

丁学 | 专家六级 |园豆:18530 | 2008-12-16 16:43
其他回答(4)
0

首先我觉得楼主这个问题问得很好,可以看出楼主对这个问题进行了很多思考以后,来看看大家的想法。

我说一下我的想法吧,我比较倾向于第二种方式,因为我觉得第二种方式更符合问题的实际,也就是更符合你项目种中的面向对象的设计。如果把ProductName作为Comment的属性处理显然不合适,就数据库层面讲还需要连接表做一个显示的东西,也不符合这种设计的要求。

总之这就是一个人的思路问题,没有太多的东西在里面,每个人都有不同的见解!

GUO Xingwang | 园豆:3885 (老鸟四级) | 2008-12-16 16:02
0

我觉得要看具体情况。如果要产品更灵活,能够更好地适应以后的变更,就用第二种方法(更OO)。

如果要考虑程序的速度或节省开发时间可以用第一种方法(节省对象创建和数据库连接的次数)

OO也有个度的问题,到底要OO到什么程序不可能有一个统一的标准,得根据具体情况具体分析。总之在开发效率与程序性能中找到一个自己认为最有利的平衡点。

园子里有些设计方面的原创帖可以看看~

http://www.cnblogs.com/Mainz/archive/2008/07/06/1237046.html

BB_Coder | 园豆:895 (小虾三级) | 2008-12-16 16:48
0

     我会优先选用第一种方法, 即添加一个ProductName或只添加一个ProductID属性,这样就满足了我们显示产品名称的需求. 假设以后需要产品的其它信息, 也可以很方便地添加一个Product属性.

    我认为这样性能会更好一些, 没有提取可能用不到的数据. 假设我们添加一个Product属性, 而一个Product对象包含一种产品的很多信息,  为了显示一个产品名称而获取整个产品的信息是没有必要的.

虽然它理符合面向对象设计的要求.

  另外建议:  若想创建Product属性时, 不要在创建Comment的实例时就填充Product对象, 而是利用一种类似懒初始化的方式, 在第一次访问Product属性时再创建Product对象. 因为很多时候可以不会用到这个Product对象.

 

 

 

Liu Changfeng | 园豆:60 (初学一级) | 2008-12-16 16:55
0

毫无疑问,选用第一种方法更好。

实际系统中,Product可以不依赖于Comment,但是Comment是依赖于某个Product,所以可以在Comment表中添加ProductID和ProductName字段来实现第一种方法

上不了岸的鱼 | 园豆:4611 (老鸟四级) | 2008-12-16 20:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册