不同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页面所有内容构成的树形结构.例如: 根 ...
随机推荐
- jQuery bootstrap框架下重置下拉框选择
前端页面中下拉选择框采用bootstrap-select美化,如下图:
- 结合Mysql和kettle邮件发送日常报表_20161001
十一假期 参加婚礼 稍晚点发博 整体流程步骤是: 写SQL-导出到excel设定excel模板调整格式-设置kettle转换--设置kettle邮件作业--完成 第一.写SQL 保持最近12个周的数据 ...
- BZOJ_3124_[Sdoi2013]直径_树形DP
BZOJ_3124_[Sdoi2013]直径_树形DP Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵 ...
- 「JLOI2011」「LuoguP4568」飞行路线(分层图最短路
题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为00到n-1n−1,一共有mm种航线,每种航线连接两个城市,并且 ...
- Dubbo配置设计
配置分类 配置格式 配置加载 可编程配置 配置缺省值 配置一致性 配置覆盖 配置继承 配置向后兼容 配置分类 首先,配置的用途是有多种的,大致可以分为: 环境配置,比如:连接数,超时等配置. 描述配置 ...
- springboot 1.5.x中的动态切换日志级别
logback是一套日志框架,由log4j的优化版,由同一个作者开发,在速度和性能上都超过其他日志框架,再结合slf4j,已成为当前最流行的日志框架. 一.springboot中使用logback s ...
- 【VS工程设置】 编译动态库,命令行添加参数,不使用预编译头,指定该项目链接 哪种 运行库
编译动态库 注意: 动态库: [目标文件扩展] => .dll + [配置类型] => 动态库(.dll) 静态库: [目标文件扩展] => .lib + [ 配置类型]=> ...
- 在python 3.6的eclipse中,导入from lxml import etree老是提示,Unresolved import:etree的错误
支持代码运行没问题,暂时没有找到真正解决办法,只能通过一下办法暂时解决.如下图:
- Tomcat访问程序外的上传文件
自己在编写程序时,把图片上传到程序根目录下,但是页面使用<img> 没有显示.但是,当我刷新项目下文件夹后,页面刷新可以显示. 我通过网上查询,当在Tomcat下的server.xml配置 ...
- AngularJs(Part 2)
I am still tired to translate these into Chinese. but who cares? i write these posts just for myself ...