今天看到了思归的博客里面的一篇文章,感觉很有同感:

…………………………
假如你的应用inherently没什么业务逻辑或者你的应用很简单,或者你的目的就是把数据库里的数据显示出来,那就用DataSet/DataTable好了。DataSet/DataTable到底提供了不少有用的方法(过滤/排序/。。。),而且具有在修改后端数据库后,不用修改中间编码,修改显示层的绑定编码即可将变动反应出来的灵活性。

但DataSet/DataTable往往反映了你的数据库里的Schema,你的表现层跟你的数据库里的东西的耦合如此之强,是否恰当,应该是个需要考虑的问题。但一想到DataSet/DataTable如此地方便,灵活,而且因此编码过程效率很高,何乐不为呢?

而且,一般来说,你的应用并不是只用来显示数据的,往往需要编辑(添加/修改/删除)数据。但DataSet/DataTable这样的容器提供了很好的功能,能帮你记住你的数据的状态,很符合Martin Fowler的PEAA一书里的Unit of Work模式。然后到最后,你可以用DataAdapter一次性地(虽然其中操作并不是一次性)把数据更新到数据库去。

然后你就会在很多地方操作DataSet/DataTable,即使编码难以避免地会有点重复,而且你是在直接操作数据,心里会有点不安,但想到DataSet/DataTable的种种好处,哎,这么方便。。。。before you know it,类似的操作会散居各个逻辑层,哎,什么domain model,我这database-driven programming也蛮好的。。。等到要维护时,或需要改版时再看,业务逻辑象映山红般满山遍野。。。。哎,反正我的项目比较小,重头开始吧。。。。If you didn't learn anything here, we will be looking forward to another unmaintainable project
…………………………

相关连接

1. Aaron Skonnard谈到从WebService返回DataSet对Interoperability的影响

2. Scott Hanselman又说,DataSet是只碗,不是水果,强类型DataSet是只上面画了个苹果的碗而已

3. Karl Seguin在MSDN上的文章“掌握 ASP.NET 之路:自定义实体类简介”里指出了DataSet的问题

4. Barry Gervin不同意,罗列了DataSet的种种好处

5. Jelle Druyts也不同意,称DataSet不是邪恶

6. 模式和实践里的2篇关于把DataSet用作DTO的文章,总结了其中的优弱点
Implementing Data Transfer Object in .NET with a DataSet
Implementing Data Transfer Object in .NET with a Typed DataSet


我是相当同意以上的观点的,不过用Domain Model在表示层编程的时候是很方便的,不过也有让我感觉头疼的地方,不错,就是O/R Mapping了。

一般来说有两种风格的Domain Model:
1.   每个对象对应于数据库中的表中一行。 Active Record模式
2.   有很多的对象(由于使用继承和模式,比如一个接口,多个实现类) Data Mapper模式

不过我没有那么讲究,项目里面大部分是用ActiveRecord模式,也就是PetShop的模式。遇到不好处理的位置(例如邮件附件和公文附件,根本就是相同的东西,却在两个表里面),就用DataMapper模式……。

转载于:https://www.cnblogs.com/zellzhang/archive/2005/07/01/184576.html

业务层应该返回DataSet/DataTable,还是对象/对象集合?相关推荐

  1. 架构语言ArchiMate -业务层(Business Layer)

    在线ArchiMate1.0中对ArchiMate进行了详细的介绍,想学习的一些同事不太喜欢看英文资料,而年后项目组要开始做业务架构了,所以在春节前最后一天把对业务层的介绍写完.以下我将会分别对不同层 ...

  2. view是视图层+action是控制层+service是业务层+dao是数据访问层。

    举例1:MVC 1)最上面的一层,是直接面向最终用户的"视图层"(View).它是提供给用户的操作界面,是程序的外壳. 2)最底下的一层,是核心的"数据层"(M ...

  3. java抛异常 代替返回_请问业务层方法是抛出一个异常好还是返回一个结果更好...

    @Override public Response checkUserToken(long uid, String accessToken, String deviceToken){ Response ...

  4. [Json] C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json (转载)...

    点击下载 ConvertJson.rar 本类实现了  C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json| 等功能 大 ...

  5. 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回

    对于业务层的程序的致命错误,我们一直的做法就是直接抛出指定的异常,让程序去终断,这种做法是对的,因为如果一个业务出现了致命的阻塞的问题,就没有必要再向上一层一层的返回了,但这时有个问题,直接抛异常,意 ...

  6. DataSet DataTable DataReader DataAdapter之间的区别

    1.四者各自的介绍 DataSet是用来做连接sql的一种方法,意思是把数据库的副本存在应用程序里,相当于存在内存中的数据库,应用程序开始运行时,把数据库相关数据保存到DataSet. DataTab ...

  7. 浅谈网页三层结构:表现层、业务层和数据层

    转自:微点阅读  https://www.weidianyuedu.com 网页设计 三层结构 表现层.业务层和数据层 1. 表现层(Presentation Layer): 表现层用于用户接口的展示 ...

  8. 数据库-ADONET-在数据集DataSet中使用关系对象DataRelation处理关系

    处理关系数据 数据库中,表很少是独立结构的,大部分数据库都包含相互关联的表. 在构建应用程序时,会遇到--显示或者通过程序设计访问数据库中相关表的数据的情况. 用户会希望,能通过在不同的表之间定位,来 ...

  9. 编写业务层和持久层事务控制代码并配置spring的ioc

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  10. 走向.NET架构设计—第五章—业务层模式,原则,实践(中篇)

    走向.NET架构设计-第五章-业务层模式,原则,实践(中篇) 前言:设计模式并不是什么很高深的东西,至少不是那么"神乎其神".说到底,设计模式就是一些设计思想.下面我们就走进项目, ...

最新文章

  1. opencv数字图像处理(图像边缘)
  2. Abbirb120型工业机器人_工业机器人市场深度调研及投资前景预测报告2020-2024年
  3. mysql-5.7.10产生的日志时间与系统时间不一致
  4. (转)编译Android源码的全过程
  5. 图片格式之YUV420 转RGB格式(含代码)
  6. enumerable java_ruby中的Enumerable的使用
  7. [转] Android SDK manager 无法获取更新版本列表
  8. 12,mac phpstorm xdebug
  9. 个人学习进度(第四周)
  10. 计算机网络基础(一)
  11. WindowsX64下tftp的安装
  12. ubuntu命令行安装teamview
  13. 有两个水桶,一个可装7升水,一个装水3升,怎样量出2升
  14. C语言入门-绝对值(abs)
  15. 将靠父id的层级关系处理成编码形式
  16. 沙箱支付宝------简单实现支付
  17. matplotlib绘制饼图
  18. CLOB、BLOB , CLOB与BLOB的区别
  19. Android Jenkins + gradle 实现自动化打包流程并上传至蒲公英平台全过程
  20. php正则匹配汉字!

热门文章

  1. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA...
  2. 收获,不止oracle
  3. [转]How do I use variables in Oracle SQL Developer?
  4. namenode 无法启动之每次开机需要重新格式化-tmp
  5. cocos2dx中的层CCLayer
  6. 编写带界面的ActiveX控件(CAB网页控件)全过程
  7. 滚动条----SCROLLBAR
  8. 从零开始学MySQL(四)
  9. 如何在ADO中使用数据读取器(DataReader)读取数据
  10. 如何用一款小工具大大加速MySQL SQL语句优化(附源码)