有一次和同事讨论起具体的技术细节,同事说不要用什么实体类,从数据库访问到的数据,直接用DataTable、DataSet 就好。理由是,从获取到的数据集转换成实体类,有一定的性能损耗。

呵呵,性能。我们总是有这种无端的担心,一副十分神秘的样子。既然如此,那么为什么还要有ORM、EF这些思想、框架呢?难道创建这些东西的大师们都是在故弄玄虚,过度设计?如果将DataTable转换成实体类有性能损耗,那么这种损耗究竟有多大?跟由此换来的逻辑清晰、开发效率提升是否可以忽略不计?

正如汇编语言的效率高于C、C++等高级语言,但现代操作系统绝大部分功能都用C或C++进行编写。理由是:

1)性能主要在于算法,开发语言之间的性能差距并不起决定性作用

2)高级语言带来的逻辑清晰、代码重用及模块化,结合现代编译技术,有可能比所谓的汇编高手所写的代码性能更好。尤其是复杂性高的模块,人脑跟机器是没办法相比的

3)编译技术的改进,对源代码进行重新编译,可以得到性能更高的成品

4)开发过程中,先使用C等高级语言编写,调试、定位成功以后,关键部分再采用汇编改写,这种思路更利于成功

另外,同事说,使用DataTable和使用实体类并没有区别。“想想看,如果增加了一个字段,实体类不是照样要修改吗?引用实体类的代码也要相应修改,这跟使用DataTable有什么不同?”同事理直气壮地问我。

我一时语塞,想不出什么理由反驳,只好弱弱地说:“那字段名修改了,实体类的属性可以不一定修改”

“通常,数据库的字段名字改了,实体类属性也要改吧,不然容易误解”

我更加哑口无言,无奈地说:“但是将数据库的东西,直接塞在前端,即UI层面,总不大好吧。。。“。说实在的,为什么要分层,为什么要将数据与UI分离,我只是人云欲云。虽然我认同分层确属必要,但这个问题我真没好好考虑过。

不过后来我静下来想了想,增加字段、改字段名、字段类型,实体类照样要修改没错;但如果去掉一些字段,那么实体类方式的优势就出来了。假如页面端直接用DataTable 访问,那么字段去掉以后,编译阶段,是发现不了错误的;但实体类不同,数据库字段删掉了,实体类应该也跟着删掉了相应属性,那么所有调用这个实体类属性的地方,编译时就会报错。如果我们在VS中,使用重构,还可以自动修正过来。

版权声明:本文为博主原屙文章,喜欢你就担走。

WEB端应该使用DataTable/DataSet吗?的更多相关文章

  1. Newtonsoft.Json高级用法DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET即Newtonsoft.Json datatable,dataset,modle,序列化

    原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而 ...

  2. Newtonsoft.Json高级用法,json序列号,model反序列化,支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity,字符串

    原文地址:https://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口 ...

  3. 移动web端的react.js组件化方案

     背景: 随着互联网世界的兴起,web前端开发的方式越来越多,出现了很多种场景开发的前端架构体系,也对前端的要求日益增高,早已经不是靠一个JQuery.js来做前端页面的时代了,而今移动端变化最大,近 ...

  4. web端限时活动逻辑处理总结

    由于要在web端做一个限时活动的功能,功能大致为:一个小时内可以报名参加活动,然后给予报名者奖品,先到先得.用到一些处理逻辑做下总结,以前没有做过类似的东西,都是自己先体验其他网站的报名方式,然后再摸 ...

  5. 小程序 web 端实时运行工具

    微信小程序 web 端实时运行工具 https://chemzqm.github.io/wept/

  6. 力软信息化系统快速开发框架 web端+winform端

    力软信息化系统快速开发框架是一套集权限管理+快速开发+动态接口+通用组件+动态UI于一体的全新.net信息化快速开发框架.力软信息化系统快速开发框架的使用,大大地缩短了开发周期,提高了软件质量,同时也 ...

  7. 基于SignalR的web端即时通讯 - ChatJS

    先看下效果. ChatJS 是基于SignalR实现的Web端IM,界面风格模仿的是“脸书”,可以很方便的集成到已有的产品中. 项目官网:http://chatjs.net/ github地址:htt ...

  8. Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

    1. 前言 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Serve ...

  9. 新手入门:史上最全Web端即时通讯技术原理详解

    前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为 ...

随机推荐

  1. css滚动条样式修改

    .activeMoreBankList{ height: 188px; overflow-y: auto;} /*滚动条样式*/.activeMoreBankList::-webkit-scrollb ...

  2. 第2节 hive基本操作:9、hive当中创建外部表的语法及外部表的操作&分区表的语法和操作

    外部表: 外部表说明: 外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉 管理表和外部 ...

  3. linux通用makefile文件

    OUTPUT_DLL := libmy.so LIBS :=-L../public/lib/x64/linux -lzookeeper_mt -lcurl \ -lfreetype -lopencv_ ...

  4. 笔试算法题(26):顺时针打印矩阵 & 求数组中数对差的最大值

    出题: 输入一个数字矩阵,要求从外向里顺时针打印每一个数字: 分析: 从外向里打印矩阵有多重方法实现,但最重要的是构建合适的状态机,这样才能控制多重不同的操作: 注意有四种打印模式(左右,上下,右左, ...

  5. [Python3网络爬虫开发实战] 1.7.3-Appium的安装

    Appium是移动端的自动化测试工具,类似于前面所说的Selenium,利用它可以驱动Android.iOS等设备完成自动化测试,比如模拟点击.滑动.输入等操作,其官方网站为:http://appiu ...

  6. [Python3网络爬虫开发实战] 1.3.4-tesserocr的安装

    在爬虫过程中,难免会遇到各种各样的验证码,而大多数验证码还是图形验证码,这时候我们可以直接用OCR来识别. 1. OCR OCR,即Optical Character Recognition,光学字符 ...

  7. php7 安装swoole扩展

    昨天无意中看到一篇关于直播的视频教程 里面讲到了swoole,对于这个东西我相信大家(接近1年phper)都是听过它,但没有真正去用它,当然也是不知道如何使用(me too). 此处总结一下(借鉴了几 ...

  8. 在linux服务器上搭建Struts2项目运行环境

    服务器上工作: 首先要先装java https://www.cnblogs.com/lamp01/p/8932740.html 然后装好tomcat https://www.cnblogs.com/y ...

  9. Linux虚拟机安装学习笔记

    一.Linux系统的安装1.VMwaer虚拟机的安装使用 官方下载软件地址:www.vmwaer.com 安装的虚拟机可以与现实的计算机进行通信 安装虚拟主机可以随意定制硬件安装配置建议: CPU:1 ...

  10. restful(3):认证、权限、频率 & 解析器、路由控制、分页、渲染器、版本

    models.py中: class UserInfo(models.Model): name = models.CharField(max_length=32) psw = models.CharFi ...