首页 新闻 搜索 专区 学院

petshop中model的设计问题

0
悬赏园豆:30 [已解决问题] 解决于 2008-03-14 09:40
<P>本人最近在自学.net,研习了petshop,在园子里看到很多分析的文章,受益良深,但是有一个问题没弄清楚,希望大家赐教:</P> <P>&nbsp;&nbsp; 在PetShop中,系统需要处理的数据库对象包括数据实体,它们对应数据库中相应的数据表。它们没有行为,仅用于表现对象的数据。这些实体类都被放到Model程序集中,例如数据表Order对应的实体类OrderInfo,它们是作为数据的载体,便于业务逻辑针对相应数据表进行读/写操作。这些类的属性分别映射了数据表的列,而每一个对象实例也恰恰对应于数据表的每一行,在UI层中,如果需要数据库中的数条记录,则用IList返回。我疑惑的是,如果UI中,需要显示的内容涉及多张表,如需要5张表中的字段组合成的一条记录,填充到IList&lt;&gt;,然后绑定到gridview,这时候的IList中的类型应该是什么样的,是不是要重新设计model?</P>
问题补充: 不用dataset和datatable,怎么实现? 很多代码生成工具生成的model就是和表一一对应的,如果不是和表一致,当项目大了,那么model的设计将会变的异常庞大和繁冗,那该怎么设计?
冬虫草的主页 冬虫草 | 初学一级 | 园豆:160
提问于:2007-12-28 14:13
< >
分享
最佳答案
0
"这些类的属性分别映射了数据表的列,而每一个对象实例也恰恰对应于数据表的每一行,在UI层中,如果需要数据库中的数条记录,则用IList返回。" 这是可以变通的,我们可以设计一个类ClassInfo,它是几个表的集合,而不一定是一个表的集合。
mjgforever | 菜鸟二级 |园豆:335 | 2007-12-29 09:44
其他回答(8)
0
如果UI中,需要显示的内容涉及多张表,如需要5张表中的字段组合成的一条记录,填充到IList<> --------------------------------- 不用填充IList,返回一个DataTable就行了,速度更快些。
红尘中迷茫 | 园豆:60 (初学一级) | 2007-12-28 14:54
0
在数据操作层,返回回来的DataTable数据 需要马上转换成实体类的数据,你说的Order表对应的实体类OrderInfo,也可以是几张表的内容共同合成的。UI层不用关心OrderInfo类的数据是从哪些表里出来的!
lu xu | 园豆:410 (菜鸟二级) | 2007-12-28 16:34
0
对象的定义与数据的存储不必一致~~只是在获取的时候使用相应的字段值去填充你的对象就可以了,比如你可以从存储过程和视图来获取数据.
沙加 | 园豆:3680 (老鸟四级) | 2007-12-28 23:10
0
对于一些大数量字段的实体数据,多处要用到,那么可以在设计一个OrderDetail这样的类,专门用于填充IList<>,方便操作。 少量字段,使用的地方不多,可以将OrderInfo多设计几个字段,持久化数据时,使用OrderInfo字段的一个子集,读取填充到IList<>时,也仅对其中需要的字段赋值。
Hunts.C | 园豆:266 (菜鸟二级) | 2007-12-29 01:32
0
楼上的说得没错. 现实中我已经这么操作过.
中尉 | 园豆:252 (菜鸟二级) | 2007-12-30 22:16
0
将数据进行封装,是有必要的,但相对上动作也繁琐了一些,不过,几乎每种数据都要进行封装,要么就用一个object[]来保存,但object[]的话会丢失很多元素,不过在.NET3.5中有了匿名类,可以直接对几个无相关的变量进行封装,这个就便捷许多了。
黄铨 | 园豆:350 (菜鸟二级) | 2008-01-05 18:46
0
"这些类的属性分别映射了数据表的列,而每一个对象实例也恰恰对应于数据表的每一行,在UI层中,如果需要数据库中的数条记录,则用IList返回。" 这是可以变通的,我们可以设计一个类ClassInfo,它是几个表的集合,而不一定是一个表的集合。 3周前 回答者:mjgforever - 菜鸟二级 没错,你也可以增加新的DTO.
"鸟巢" | 园豆:175 (初学一级) | 2008-01-25 17:18
0
学习
叶子绿了 | 园豆:50 (初学一级) | 2008-01-30 15:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册