我觉得第一种方式比较直接一些,因为第二种方式的话,还得初始化一个product,而我们实际上只需要一个productname,那这里无疑是浪费了不少的性能
不过,我觉得还有更好的办法,无论在哪里显示评论,在同时你一样得显示出评论对应的商品,所以comment似乎更应该是这种方式使用的:Product.Comment,在这种情况下,先有 product后有comment,自然也就不存在上面的问题了
如果不这样用,也可以直接Comment.xxx/Product.Name,还是上面那个理由,在出现评论的地方,对应的产品总是应该出现的吧?所以Product类一样在Comment类之前初始化了,照样可以用 Product.Name,而不一定非得让productname和comment产生什么关联
首先我觉得楼主这个问题问得很好,可以看出楼主对这个问题进行了很多思考以后,来看看大家的想法。
我说一下我的想法吧,我比较倾向于第二种方式,因为我觉得第二种方式更符合问题的实际,也就是更符合你项目种中的面向对象的设计。如果把ProductName作为Comment的属性处理显然不合适,就数据库层面讲还需要连接表做一个显示的东西,也不符合这种设计的要求。
总之这就是一个人的思路问题,没有太多的东西在里面,每个人都有不同的见解!
我觉得要看具体情况。如果要产品更灵活,能够更好地适应以后的变更,就用第二种方法(更OO)。
如果要考虑程序的速度或节省开发时间可以用第一种方法(节省对象创建和数据库连接的次数)
OO也有个度的问题,到底要OO到什么程序不可能有一个统一的标准,得根据具体情况具体分析。总之在开发效率与程序性能中找到一个自己认为最有利的平衡点。
园子里有些设计方面的原创帖可以看看~
http://www.cnblogs.com/Mainz/archive/2008/07/06/1237046.html
我会优先选用第一种方法, 即添加一个ProductName或只添加一个ProductID属性,这样就满足了我们显示产品名称的需求. 假设以后需要产品的其它信息, 也可以很方便地添加一个Product属性.
我认为这样性能会更好一些, 没有提取可能用不到的数据. 假设我们添加一个Product属性, 而一个Product对象包含一种产品的很多信息, 为了显示一个产品名称而获取整个产品的信息是没有必要的.
虽然它理符合面向对象设计的要求.
另外建议: 若想创建Product属性时, 不要在创建Comment的实例时就填充Product对象, 而是利用一种类似懒初始化的方式, 在第一次访问Product属性时再创建Product对象. 因为很多时候可以不会用到这个Product对象.
毫无疑问,选用第一种方法更好。
实际系统中,Product可以不依赖于Comment,但是Comment是依赖于某个Product,所以可以在Comment表中添加ProductID和ProductName字段来实现第一种方法