读书人

三层架构中多表查询是返回实体好还是集

发布时间: 2012-05-08 22:09:41 作者: rapoo

三层架构中多表查询是返回实体好还是集合好 讨论下
三层架构中多表查询是返回实体好还是集合好? 这个问题一直困扰着我,拿不定主意。
如果是单表的话 实体类是不错的 遇到多表的话难不成再建一个多表的实体类? 少个字段多个字段那岂不是要创建多个差不多的实体?? 这样做很显然太死板了
有些朋友就想到如果是多表查询 那就返回数据集(Dataset),这也许是大家比较认同的办法吧,可是又感觉使用了弱类型的数据集不那么的OO
恩,为了解决这个问题 那就还是用实体类吧 在数据库里创建个视图 按照视图来创建实体类(这里有可能说的不妥,一般是先建数据模型最后才生成数据库,申明下呵呵) 这样做应该也还不错

所以想问问大家的意见 一般大家是怎么做的呢?? 求大虾指教
纠结的我头发都白了

[解决办法]
dataset用的比较多吧.有时候为了方便也会新建实体类.
[解决办法]
只是显示用DataSet就可以了......
[解决办法]
我们都是用实体类,便于扩展
[解决办法]
对于小的东西 一般用dataset,
反之用实体类 。


我们公司的项目一直用的实体类 对于楼主说的 多表查询 一般是通过关联多次查询的 虽然查询效率没dataset好 单感觉维护更好
[解决办法]
设计业务逻辑的时候不涉及数据库,自然就用不到datatable之类的东西
[解决办法]
我看楼主在问三层,问orm,那就是在学新的开发模式了,原来的dataset是弱类型,都是围绕数据库编程的,既然你要分层,那么你现在的思考方式就要变了,不能盯着数据库的多表查询,三层没有这个概念,三层的实体是先于数据库设计的,你需要什么实体就先定义什么实体,数据库访问层去迎合实体,而不是实体去迎合数据库的多表查询。

现在的orm很多都是先设计数据库,然后用工具映射自动生成实体,这不是正统的方法,EF的Code First模式才是未来。
[解决办法]
我认为如果你要追求效率,就无需三层。既然用三层,就严格按照oo的思想来
[解决办法]
顶6楼的说法,先设计实体类,最后在根据需要,来设计数据库.
可以这么说,一个实体类的数据为了优化数据存储,可以映射到多张表;反过来也是,多个数据表的数据可以映射成一个实体.
实体的设计完全是基于领域逻辑来的.
[解决办法]
增,删,改和简单的查询用ORM。
其他的复杂查询用DataTable
没必要全部追求ORM
如果你全部追求ORM,给你个需求:行转列要查询出数据来,你怎么做?ORM遇到问题了。DataTable 可以解决问题
[解决办法]

探讨

对于小的东西 一般用dataset,
反之用实体类 。


我们公司的项目一直用的实体类 对于楼主说的 多表查询 一般是通过关联多次查询的 虽然查询效率没dataset好 单感觉维护更好

[解决办法]
探讨

引用:

对于小的东西 一般用dataset,
反之用实体类 。


我们公司的项目一直用的实体类 对于楼主说的 多表查询 一般是通过关联多次查询的 虽然查询效率没dataset好 单感觉维护更好


这个估计是说错了。
小点的项目(10W以下)。你用实体类差不多。
大点的项目(40w以上)怎么也得有个自定义查询,动态SQL哪个大点项目没有。
……

[解决办法]
10张表在一起 进行关联查询,说明设计严重有问题,要么是表的设计,要么就是没有合理利用缓存,使用了实体类,很少再需要多表关联查询了.

[解决办法]
建议对Linq和ORM做一定的了解,用实体类也一样实现复杂的关系,再复杂的SQL操作,后台代码里面都可以不出现SQL语句。楼主如果没见过这类架构,可以看看新版本的Petshop5.0的架构,然后根据实际情况做一个选择。
[解决办法]
OO只是思想。没必要非要全部映射成实体类。具体情况具体分析。
再说天朝的公司都有一个特点就是时间紧任务重,小公司为了揽活不会给开发人员太多的时间。如果全部映射成实体类的话,开发周期会很长。老板也不会让的,除非客户对时间要求比较宽松。
[解决办法]
= =

纠结啥呢。

返回实体的集合呗。
[解决办法]
NSprint, Nstruct,对象是趋势
[解决办法]
这么说吧要是小数据量并且单条的话dataset和实体类都可以 ,但是实体类比较容易维护好理解看起来清晰。
但是实体类不能够批次多条的像底层传输数据。


所以在大数据多条的时候可以用强类型的dataset
[解决办法]
探讨

引用:

= =

纠结啥呢。

返回实体的集合呗。

和实体一样啊 我说的集合是弱类型啊


[解决办法]
如果你说的是多表关联查询,--就是说得到的是一个无可意料的 混合表。
(而不止是一张表,而是多表(可能10张),而且也不确定有张表。)
那要建这样的实体可不容易。
但是我们要的是数据:
且并不是要实体。
所以用 table 这类数据结构了, 来存放最好不过了, 比如 DataSet
要么自已定义一个动态表格类。 可以继承于DataSet ,
并增加一些你要的功能。
[解决办法]
只读的话就返回sqldatareader,有更新需要的话,就用datatable,或者dataset .
[解决办法]
莎士比亚说过:“选择实体类还是dataset这是个问题”。曾经有资料介绍dataset功能强大但占用资源较多一般有datatable
[解决办法]
大多数情况下毫不犹豫 直接DataSet

除开一些特殊情况,看此模块使用的频率如何 一般3次以上就考虑建实体了。
[解决办法]
实体集合二次筛选也很麻烦,即使有linq,但linq的效率,
[解决办法]
个人觉得,对于那些纯粹是为了展示的查询,就返回datatable或者datareader就足够了,
不需要映射到实体,比如一些报表展示。

映射到实体有个问题,就是稍微有点变化,都要修改实体,比如报表加一列,报表减一列之类的。

但对于一些涉及编辑、多功能的地方,最好返回实体集合。
但这个还有一个问题,就是得象java一样建立一个数据处理中心,
否则,返回实体实际没有任何意义。
对象的好处在于永远只有一份,无论做多少筛选操作编辑查询,永远只有一份。
不象datatable,datareader,会复制很多份。

读书人网 >C#

热点推荐