不一樣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的編寫方法,先建表實體,再建實體映射,經過遷移生成數據庫表和表關係,這是正規的操做步驟,咱們發現,這種方式並非以數據庫建表爲開始,而是以實體模型爲開始,實際上它就是領域模型的核心,即咱們開發以業務邏輯爲主,經過熟悉業務邏輯來新建模型,而不是以數據庫爲核心,數據庫只是數據持久化的一種方式,我也能夠以其餘的形式存儲,我以爲這並非操做方式上面的改變,最主要的是處理問題的思路發生變化,傳統的方式過於依賴某一種數據庫,可是,用戶可不關心你用哪一種數據庫,只關心這個功能實現了沒,即關注點應該是業務邏輯,在我看來領域驅動實際上就是爲了更好的處理業務邏輯而衍生的一種設計方法,固然這種方法也存在一些優缺點,我的理解以下:

  只適用於中/大型項目,即業務邏輯比較複雜的系統

時間有限,手打文章,若有問題,大神勿噴。

相關文章
相關標籤/搜索