对于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新的理解的更多相关文章

  1. bootloader新的理解

    1.对于bootloader这样的程序,作为板卡刚开始启动的部分,大致的顺序是一致的,大部分都是分为两个部分,一部分是汇编编写的,一部分是用c语言编写的.一般在汇编部分完成各种初始化的操作,比如关闭看 ...

  2. 238. Product of Array Except Self(对O(n)和递归又有了新的理解)

    238. Product of Array Except Self     Total Accepted: 41565 Total Submissions: 97898 Difficulty: Med ...

  3. 对OO的封装了有了新的理解——希望是普通函数来写总体流程来统管类似的业务,但却又涉及具体操作的函数,仍然可以达到目的

    就是不厌其烦,把那个具体操作函数封装成虚函数,只需要返回它的结果就行.而总体流程根据这个结果继续进行处理,这样就能总体流程和虚函数两不误了.

  4. 对于python 作用域新的理解

    今天看Python习题,看到如下题目 def num(): return [lambda x: i*x for i in range(4)] print([m(2) for m in num()]) ...

  5. 对Delphi控件作用的新理解(控件本身的源代码就是一个很强的工业级源码)

    最近几天,对Delphi控件的含义有了一个新的理解.其实它不仅仅是给程序员提供功能的一个表层调用,控件本身的源代码就是一个很强的工业级源码.而且它的Main例子,往往就已经是半成品.而别的语言里没有那 ...

  6. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

  7. 深入理解javascript闭包(二)

    在上次的分享中javascript--函数参数与闭包--详解,对闭包的解释不够深入.本人经过一段时间的学习,对闭包的概念又有了新的理解.于是便把学习的过程整理成文章,一是为了加深自己闭包的理解,二是给 ...

  8. 从ord()中对Unicode编码的理解

    刚开始学习编程的时候,老对字符串编码的理解模模糊糊.也一直看这方便的资料,今天在看Dive in python时,突然有了新的理解(不知道是否正确). Python有个built-in函数ord(), ...

  9. Html文档流和文档对象模型DOM理解

    前言 在理解浮动和定位时,触碰到文档流概念.为了更好理解浮动和定位,学习了文档流和DOM(文档对象模型). 正文 DOM(文档对象模型)简单理解就是编写的html页面所有内容构成的树形结构.例如: 根 ...

随机推荐

  1. 1119 Pre- and Post-order Traversals(30 分)

    1119 Pre- and Post-order Traversals(30 分) Suppose that all the keys in a binary tree are distinct po ...

  2. P2743(poj1743) Musical Themes[差分+后缀数组]

    P2743 乐曲主题Musical Themes(poj1743) 然后呢这题思路其实还是蛮简单的,只是细节特别多比较恶心,忘记了差分带来的若干疏漏.因为转调的话要保证找到相同主题,只要保证一段内相对 ...

  3. SHOI2001化工厂装箱员——记忆化搜索

    题目:https://www.luogu.org/problemnew/show/P2530 太弱了不会用DP,于是暴搜: 每次传进一个数组c记录当前状态各种物品有多少个,枚举取哪种物品,返回最小值, ...

  4. 《TCP/IP详解卷一:协议》 概述

    分层           TCP/IP协议族是一组不同层次上的多个协议的组合.TCP/IP通常被认为是一个四层次协议系统.   链路层(数据链路层或网络接口层):通常包括操作系统中的设备驱动程序和计算 ...

  5. Maven项目实战(1)

    一.maven的好处? 同样的项目使用maven工程来实现,它的项目源码很小: 1.依赖管理 就是对jar 包管理的过程 2.项目的一键构建 (编译-----测试----- 运行 --打包------ ...

  6. 同时安装Python2与Python3,安装第三方包,老是报错

    同时安装Python2与Python3,安装第三方包,老是报错提示Fatal error in launcher: Unable to create process using '"',那可 ...

  7. centos7 install pip

    1. 安装过程 yum -y install epel-release yum install python-pip pip install --upgrade pip

  8. 蓝桥杯 正则问题(dfs)

    1607: 正则问题 时间限制: 1 Sec  内存限制: 256 MB提交: 34  解决: 13[提交][状态][讨论版] 题目描述 考虑一种简单的正则表达式:只由 x ( ) | 组成的正则表达 ...

  9. win10彻底关闭自动更新

    第1步 https://jingyan.baidu.com/article/9faa7231e7b78b473c28cbb6.html 第2步 http://www.360doc.com/conten ...

  10. ue4 2游戏构架相关

    官网:游戏性指南 https://docs.unrealengine.com/latest/CHN/Gameplay/index.html 深入UE4剖析源码,浅出GameEngine设计理念,比较好 ...