不同ORM新的理解
对于ORM你怎么理解?你用过的ORM有什么区别?这是面试的时候基本上会问的问题。
问题很简单,本文不在阐述。本文主要讨论Dapper 和 EF Core First的区别。
从直观上来看两个都是ORM,只不过一个是轻量级一个是重量级,EF的LINQ支持的非常好,Dapper查询速度非常快但是要手写SQL,当然EF也支持手写SQL,等等,这些我觉得是一些表面的区别。
实际上我觉得他们的本质上区别的:Dapper面向数据库,EF面向对象。
何为面向数据库?如果你用过ADO.NET的方式开发过程序,那么你会有直观的感觉,我要写一个功能,必须先建表吧,数据库有表我才能进行各种操作,一切开发的前提你得把数据库建好,然后在程序中写各种SQL,CURD必不可少,实际上我们大多数的开发人员都是以这种方法来进行开发,这种方法很符合我们正常的思维逻辑,这种开发方式并没有太大的问题。
研究过领域驱动设计的人应该知道这种方法的优缺点,当然每个人的理解程度不一样,我个人觉得有以下几点:
缺:
1、过于依赖数据库
2、编写效率低下,相似代码不好重构
优:
1、执行效率快,简单易理解,上手快,好调试
那么面向对象的方式呢?或者说EF Code First 这种方式呢?我们先理一下code first的编写方法,先建表实体,再建实体映射,通过迁移生成数据库表和表关系,这是正规的操作步骤,我们发现,这种方式并不是以数据库建表为开始,而是以实体模型为开始,实际上它就是领域模型的核心,即我们开发以业务逻辑为主,通过熟悉业务逻辑来新建模型,而不是以数据库为核心,数据库只是数据持久化的一种方式,我也可以以其他的形式存储,我觉得这并不是操作方式上面的改变,最主要的是处理问题的思路发生变化,传统的方式过于依赖某一种数据库,但是,用户可不关心你用哪种数据库,只关心这个功能实现了没,即关注点应该是业务逻辑,在我看来领域驱动实际上就是为了更好的处理业务逻辑而衍生的一种设计方法,当然这种方法也存在一些优缺点,个人理解如下:
只适用于中/大型项目,即业务逻辑比较复杂的系统
时间有限,手打文章,如有问题,大神勿喷。
不同ORM新的理解的更多相关文章
- bootloader新的理解
1.对于bootloader这样的程序,作为板卡刚开始启动的部分,大致的顺序是一致的,大部分都是分为两个部分,一部分是汇编编写的,一部分是用c语言编写的.一般在汇编部分完成各种初始化的操作,比如关闭看 ...
- 238. Product of Array Except Self(对O(n)和递归又有了新的理解)
238. Product of Array Except Self Total Accepted: 41565 Total Submissions: 97898 Difficulty: Med ...
- 对OO的封装了有了新的理解——希望是普通函数来写总体流程来统管类似的业务,但却又涉及具体操作的函数,仍然可以达到目的
就是不厌其烦,把那个具体操作函数封装成虚函数,只需要返回它的结果就行.而总体流程根据这个结果继续进行处理,这样就能总体流程和虚函数两不误了.
- 对于python 作用域新的理解
今天看Python习题,看到如下题目 def num(): return [lambda x: i*x for i in range(4)] print([m(2) for m in num()]) ...
- 对Delphi控件作用的新理解(控件本身的源代码就是一个很强的工业级源码)
最近几天,对Delphi控件的含义有了一个新的理解.其实它不仅仅是给程序员提供功能的一个表层调用,控件本身的源代码就是一个很强的工业级源码.而且它的Main例子,往往就已经是半成品.而别的语言里没有那 ...
- 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念
一.前言 DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...
- 深入理解javascript闭包(二)
在上次的分享中javascript--函数参数与闭包--详解,对闭包的解释不够深入.本人经过一段时间的学习,对闭包的概念又有了新的理解.于是便把学习的过程整理成文章,一是为了加深自己闭包的理解,二是给 ...
- 从ord()中对Unicode编码的理解
刚开始学习编程的时候,老对字符串编码的理解模模糊糊.也一直看这方便的资料,今天在看Dive in python时,突然有了新的理解(不知道是否正确). Python有个built-in函数ord(), ...
- Html文档流和文档对象模型DOM理解
前言 在理解浮动和定位时,触碰到文档流概念.为了更好理解浮动和定位,学习了文档流和DOM(文档对象模型). 正文 DOM(文档对象模型)简单理解就是编写的html页面所有内容构成的树形结构.例如: 根 ...
随机推荐
- ACM学习历程—SNNUOJ 1116 A Simple Problem(递推 && 逆元 && 组合数学 && 快速幂)(2015陕西省大学生程序设计竞赛K题)
Description Assuming a finite – radius “ball” which is on an N dimension is cut with a “knife” of N- ...
- Mysql误删了root用户怎么办
1.停止mysql服务:在mysql安装目录下找到my.ini:在my.ini中找到以下片段[mysqld]:另起一行加入代码:skip-grant-tables 并保存 2.启动mysql服务,并登 ...
- 数据库关键字 (Oracle, SQL Server, DB2)
Oracle SQL Server DB2 ! @@IDENTITY DETERMINISTIC & ADD DISALLOW ( ALL DISCONNECT ) ...
- WPF架构分析
1.DisptcherObject提供了线程和并发模型,实现了消息系统. 2.DependencyObject提供了更改通知,实现了绑定,样式. 3.Visual是托管API和非托管API(milco ...
- VMware vs openStack对比直观优势
openStack VS VMware直观优势:1.openStack设计架构开放.生态稳定 大型国际巨头公司支持及开发参与,功能版本迭代快,相对的VMware则是封闭的商业化系统.2.基于openS ...
- tcp/ip协议和http协议
TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合. 传统上来说 TCP/IP 被认为是一个四层协议:应用层(telnet, ftp, http, smtp, dns等),传输层(tcp, ...
- mysql 1069 数据库无法启动解决办法
mysql无缘无故的启动不了了. 在控制台里面用root连接,报错10061. 在服务管理里面启动,报错1069. 在网上找了一些解决方法,删除my.ini之类的,都无效.后来在百度经验里面找到了可行 ...
- VS2015中使用Git遇到问题 Cannot do push / pull in git - working with visual studio
I have made a lot of changes, when I am trying to push them - I am getting the next error: You canno ...
- “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第一篇
一.第一篇内容中必须得简单的介绍一下MVC(在大学时用的是WebForm,拖控件感觉很爽,但是工作后,技术总监让一定要放弃这种 想法!) 1.MVC是什么?:(1) ASP.NET MVC是微软官方提 ...
- JS判断上传文件类型
/* * 判断图片类型 */ function checkImgType(ths){ if (ths.value == "") { ...