所在位置:答疑 - 内容   
我在设计时定义了一个商品类,有如下属性: 名称成本价供应商销售价
 

2007-11-6  17:13:23  jeffery:  假设我在设计时定义了一个商品类,有如下属性: 名称成本价供应商销售价 但是顾客在浏览时,原有的成本价和供应商属性不需要暴露给顾客,同时要添加商品总评论数和评级,在这时,原来设计的实体类就不能满足这个要求了  
2007-11-6  17:13:30  jeffery:  象这种情况,是不是需要针对顾客浏览新增一个实体类呢? 
2007-11-6  17:15:36  潘:  界面上的交互和内部类的设计有必然关系吗?为什么成本价供应商销售价是商品的属性就会被顾客看到?
2007-11-6  17:20:35  jeffery:  这个问题不是必然的,我的意思是顾客浏览的时候不需要知道这两个属性,关键是浏览的时候需要给顾客显示另外两个实体类原先没有的属性,就是评论数和顾客评级,这两个属性是在类图里面不存在的 
2007-11-6  17:21:44  潘:  顾客评级是另外的类,和商品关联 
2007-11-6  17:23:08  jeffery:  评论和评级都是根据顾客发表的评论统计出来的,这两个数字都是浏览商品时根据商品编号从评论里面查询出来的 
2007-11-6  17:23:42  潘:  你的问题是什么 
2007-11-6  17:24:33  jeffery:  我的问题是原来在类图里面设计的商品类没有这两个属性,但是现在在顾客浏览时需要显示这两个属性 2007-11-6  17:26:01  潘:  添加顾客评论类指向商品 
2007-11-6  17:29:17  jeffery:  publicclassProduct{ArrayListReviews;} 这样? 
2007-11-6  17:33:22  潘:  反了吧 
2007-11-6  17:35:31  jeffery:  但是我只是在显示商品列表或显示搜索结果的时候需要显示这些数字,如果还要商品评论全读取出来的话,效率就比较低了,我可能刚才没有说清楚,我剪个图吧 
2007-11-6  17:38:31      jeffery 发送 未命名.bmp 
2007-11-6  17:41:11  jeffery:  publicclassReviews{ArrayListProduct;} 这样应该是反的吧,一条评论不可能同时针对多个商品发表 
2007-11-6  17:46:01  jeffery:  这样如果以后还要显示购买人数的话,不是还需要把订单也牵扯进来:$? 
2007-11-6  17:55:42  潘:  publicclassReviews{ProductaProduct;}  
2007-11-7  15:16:28  jeffery:  哦?能介绍一下具体怎么做吗?我目前是为前台浏览专门建了一个实体类,实体类的属性和sql 查询的字段对应 
2007-11-7  15:17:33  潘:  先不要考虑面向对象什么的,要是以前你怎么做的 
2007-11-7  15:21:49  jeffery:  以前我是在创建数据库的时候根据表结构同时映射一个实体类,同时赋予一定的职责,但是在前台显示的时候,有的数据本身是实体类里面所不具有的,比如评论数,评级,购买人数等,这些要从其他表里面临时统计出来,所以前台浏览我没有使用实体类映射,直接用的DataTable 
2007-11-7  15:23:00  jeffery:  但是这样的话如果数据库结构发生变化后,业务层和表示层的代码也要相应的修改,这样就违背了分层的原则 
2007-11-8  16:09:33  潘:  为什么违背分层的原则呢?你有了新的需求,添加了新的表,相应添加业务层和表示层,有什么问题吗 
2007-11-8  16:10:05  潘:  分层是把表示逻辑、业务逻辑、数据逻辑分开 
2007-11-8  16:10:39  潘:  表示逻辑:热销商品用紫色字体 
2007-11-8  16:11:17  潘:  业务逻辑:销量排行榜前××名为热销商品 
2007-11-8  16:11:50  潘:  数据逻辑: selecttop5productidfromproduct...... 

2007-11-8  16:18:07  jeffery:  现在我是这样做的,先用汉字表述,清楚一点 select 商品名称,商品编号,(selectcount(评论)from 评论表)as 评论数,(selectsum(购买数量)from 订单项)as 卖出数量 fromproducts 
2007-11-8  16:19:39  jeffery:  如果查询语句的字段别名变了,比如评论数变为评论,卖出数量改为成交数量,这样就不行了 
2007-11-8  16:21:10  jeffery:  如果通过实体类映射的话,可以将这种改变封装到数据层 
2007-11-8  16:23:28  潘:  这种相当于表数据入口,接口宽,脆弱 
2007-11-8  16:24:06  潘:  实体类映射相当于行数据入口

2007-11-8  16:25:10  jeffery:  实体类映射也可以使用集合,把多行映射为多个实体类返回,.net 支持这种集合的数据绑定 
2007-11-8  16:30:43  jeffery:  您昨天说得数据库建模是怎么回事呢? 
2007-11-8  16:41:59  潘:  就是说数据库建模建得好,对象建模也是类似的思路,能不能把你的数据库的生成脚本发给我看看?