不一样ORM新的理解

对于ORM你怎么理解?你用过的ORM有什么区别?这是面试的时候基本上会问的问题。面试

问题很简单,本文不在阐述。本文主要讨论Dapper 和 EF Core First的区别。数据库

从直观上来看两个都是ORM,只不过一个是轻量级一个是重量级,EF的LINQ支持的很是好,Dapper查询速度很是快可是要手写SQL,固然EF也支持手写SQL,等等,这些我以为是一些表面的区别。app

实际上我以为他们的本质上区别的:Dapper面向数据库,EF面向对象。设计

何为面向数据库?若是你用过ADO.NET的方式开发过程序,那么你会有直观的感受,我要写一个功能,必须先建表吧,数据库有表我才能进行各类操做,一切开发的前提你得把数据库建好,而后在程序中写各类SQL,CURD必不可少,实际上咱们大多数的开发人员都是以这种方法来进行开发,这种方法很符合咱们正常的思惟逻辑,这种开发方式并无太大的问题。调试

研究过领域驱动设计的人应该知道这种方法的优缺点,固然每一个人的理解程度不同,我我的以为有如下几点:code

缺:对象

一、过于依赖数据库开发

二、编写效率低下,类似代码很差重构效率

优:重构

一、执行效率快,简单易理解,上手快,好调试

那么面向对象的方式呢?或者说EF Code First 这种方式呢?咱们先理一下code first的编写方法,先建表实体,再建实体映射,经过迁移生成数据库表和表关系,这是正规的操做步骤,咱们发现,这种方式并非以数据库建表为开始,而是以实体模型为开始,实际上它就是领域模型的核心,即咱们开发以业务逻辑为主,经过熟悉业务逻辑来新建模型,而不是以数据库为核心,数据库只是数据持久化的一种方式,我也能够以其余的形式存储,我以为这并非操做方式上面的改变,最主要的是处理问题的思路发生变化,传统的方式过于依赖某一种数据库,可是,用户可不关心你用哪一种数据库,只关心这个功能实现了没,即关注点应该是业务逻辑,在我看来领域驱动实际上就是为了更好的处理业务逻辑而衍生的一种设计方法,固然这种方法也存在一些优缺点,我的理解以下:

  只适用于中/大型项目,即业务逻辑比较复杂的系统

时间有限,手打文章,若有问题,大神勿喷。

相关文章
相关标签/搜索