日期:2014-05-18  浏览次数:21021 次

三层架构中多表查询是返回实体好还是集合好 讨论下
三层架构中多表查询是返回实体好还是集合好? 这个问题一直困扰着我,拿不定主意。
如果是单表的话 实体类是不错的 遇到多表的话难不成再建一个多表的实体类? 少个字段多个字段那岂不是要创建多个差不多的实体?? 这样做很显然太死板了
有些朋友就想到如果是多表查询 那就返回数据集(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
------解决方案--------------------
探讨

引用:

= =

纠结啥呢。

返回实体的集合呗。

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