不同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页面所有内容构成的树形结构.例如: 根 ...
随机推荐
- 发挥到极致的Asterisk SS7 解决方案【转】
基于SS7的开源解决方案在国内已经安装了很多.很多用户都使用chan_ss7 开源协议栈作为呼叫中心,400电话,计费结算的系统.随着国内对开源Asterisk的认可程度越来越高. Asterisk让 ...
- python script
1.tab键自动补全(每次导入时要将脚本的路径加入到sys.path中) import sysimport readlineimport rlcompleterimport atexitimport ...
- 乱写的一个SQL框架
闲来没事,看了mybatis的实现形式,就心血来潮的自己弄了一个仿照mybatis的框架,性能肯定不好,而且有很多问题,但是是一次有益的尝试 1.基本配置文件 <!--加载数据源--> & ...
- Microsoft SQL Server 数据库
1. master 数据库 master 数据库记录 SQL Server 系统的所有系统级别信息.它记录所有的登录帐户和系统配置设置.master 数据库是这样一个数据库,它记录所有其它的数据库,其 ...
- cocos2dx 获取精灵的高亮效果
转自:http://blog.csdn.net/tyxkzzf/article/details/38703883 CCSprite* getHighlightSprite(CCSprite* norm ...
- [hdu1269]迷宫城堡(SCC)
题意:求一张图的强连通分量,若为1,则输出yes,否则输出no. 解题关键:targin算法模板题. #include<iostream> #include<cstring> ...
- 转:AppScan代理扫描app/H5安全测试
1.首先设置AppScan代理,设置如下:
- CodeChef - ELHIDARR Find an element in hidden array(二分交互)
Find an element in hidden array There is an array of length N consisting of non-negative integers. T ...
- HDU - 1546 ZOJ - 2750 Idiomatic Phrases Game 成语接龙SPFA+map
Idiomatic Phrases Game Tom is playing a game called Idiomatic Phrases Game. An idiom consists of sev ...
- 解决ubuntu下filezilla登录ftp看不到中文目录和文件的问题 (转载)
转自:http://blog.csdn.net/duguteng/article/details/7716283 打开filezilla 文件-站点管理器-新站点--字符集--使用自定义的字符集 ,填 ...