為何資料庫優先ORM模型在Go社群受到歡迎? - Reddit
資料庫優先ORM模型(db first ORM)的定義:根據資料庫自動生成程式碼,而不是根據程式碼生成資料庫表,如 sqlc、sqlBoiler;
另外一種ORM模型是:根據程式碼自動生成資料庫表,這種稱為程式碼優先ORM模型(code first ORM模型),如GORM、sqlx和sql helper。
為什麼現在資料庫優先ORM模型在Go社群中越來越受歡迎?
使用ORM的全部意義在於幫助分離關聯式資料庫和資料模型,並且在構建業務邏輯時不再擔心基於sql的關係。
雖然資料庫優先ORM模型在某種程度上也可以實現了這一點,但開發人員對生成的資料模型卻沒有任何控制。這就使得資料模型與生成的程式碼緊密耦合在一起,最終迫使建立獨立的應用模型,似乎並沒有真正幫助提高生產力,而這正是使用ORM的全部意義。
但是,程式碼優先ORM模型雖然也會汙染領域模型,但程度要比資料庫優先ORM模型小得多。
而且,即使需要切換到其他ORM或者甚至是原始的sql,也不需要太多的額外工作。
資料庫優先ORM模型與程式碼優先ORM模型的優勢?
網友討論:
1. 我喜歡 Go 的主要原因之一是編譯時的型別安全。當你開始手寫SQL的時候,這一點就完全消失了。這讓人筋疲力盡。
我曾經用sqlx這樣的程式碼優先ORM模型完成過整個大型專案,儘管這比標準的lib方式要好得多,但你最終不得不重新發明輪子,或者做一些奇怪的黑客來一次插入多條記錄,特別是對於更復雜的關係。這樣一來,你就失去了整個程式碼庫與資料庫互動方式的一致性。
也許這只是我的看法,但我覺得一個可靠的ORM所具有的一致性、型別安全和整體測試量使得任何缺點都是微不足道的,特別是在一個大型的程式碼庫中。由於效能的原因,能夠編寫自定義的sql,這也抵消了一些關於這方面的擔憂。
資料庫是我們大多數人所做事情的基礎。我們寫的程式碼只是它上面的肉汁。如果資料庫包含了我們可能關心的所有資料的超級集合,那麼為什麼不倚重這一事實,並使用一個以一致的、經過測試的方式與之互動的庫。
我覺得很多人不喜歡 "魔力",或者被ORM中表現糟糕的查詢所咬過。但我不知道能夠為特定的情況寫一個一次性的查詢,怎麼就不能解決這個問題。
2. 假設使用 ORM 的全部目的是幫助分離關聯式資料庫模型,並在構建業務邏輯時不再擔心基於 sql 的關係?
這是個糟糕的目標:你不能停止擔心基於sql的關係,它們是大多數服務效能的主要驅動因素。我花了一年多的時間在一家大公司擁有一個大型的、老舊的、被濫用的postgres資料庫,我無法告訴你使用活動記錄的人有多頻繁地引入N+1查詢(根據他們與記錄的關係找到一個id列表,然後使用for迴圈單獨查詢每個記錄),因為他們忘記了在他們完全普通的for迴圈的另一邊有一個資料庫。我無法告訴你這對資料庫的效能來說是多麼的糟糕。
每當你看到一個 "無程式碼 "產品的廣告,承諾PM和高管將能夠從頭開始構建整個產品,而不必與那些討厭的工程師打交道時,你無疑會翻白眼。ORMs是資料庫的無程式碼產品。不過,它們更糟糕,因為在我看來,對於PM來說,試圖在不花25萬買工程師或花5年時間學習程式碼的情況下完成更多工作是完全合法的。你是一個工程師!你是一個工程師。正確使用資料庫的能力完全在你的掌握之中!
所以,現在你有很多人因為某種原因想要一個ORM,但也許已經認識到忽視被執行的SQL是一個問題,所以現在你有了db-first ORM(資料庫優先ORM模型)解決方案。也許到時候,我們還可以把ORM完全乾掉。
3. Java 和 Go 之類的語言並非旨在為資料庫表建模。胡亂製作模型以便它們生成正確的表和高階查詢並不有趣。
關於 ORM,我最喜歡的一點是它們使基本的資料庫操作變得容易。CRUD 已經有了一個強型別函式。
DB-First ORM 提供了後者的好處,而沒有前者的成本。大多數樣板是自動生成的,所有非樣板我可以按照自己的意願去做。
編寫用於建立表的 SQL,只是想不為簡單的crud編寫SQL而已。
4. banq:DDD領域模型 != ORM中領域模型或資料模型,很多ORM大咖在ORM教程中往往把與資料庫表對映對應的資料模型稱為領域模型,這實際是錯誤誤導,因為領域模型不能依賴於資料庫等基礎設施技術,明白這個道理後,不如將ORM中資料物件模型或稱為實體模型與DDD的實體模型或聚合模型等領域模型區別開來,各搞一套。這樣,簡單的系統就無需DDD領域模型,系統複雜起來,就專門建立領域層,將ORM實體資料模型驅趕降級到基礎設施等DAO或持久層或DDD儲存庫Repository中,ORM 應該嚴格限制在 CRUD 中。
相關文章
- 為何Kubernetes如此受歡迎?
- 為什麼NoSQL資料庫這麼受歡迎?SQL資料庫
- 簡單是優勢,但為何複雜性還受歡迎?
- 為什麼python大資料受歡迎?Python大資料
- 邊緣計算為何會如此受歡迎?
- 手把手教你在Flutter專案優雅的使用ORM資料庫FlutterORM資料庫
- 墨天輪最受DBA歡迎的資料庫技術文件-SQL優化篇資料庫SQL優化
- 何為CSS 樣式優先順序CSS
- 為何現代化虛擬展廳如此受歡迎?
- 為什麼Java能夠持續的受到歡迎呢?原因有這些Java
- 大資料時代,為什麼python大受歡迎?大資料Python
- 手把手教你在Flutter專案優雅的使用ORM資料庫--下篇FlutterORM資料庫
- 手把手教你在Flutter專案優雅的使用ORM資料庫(下篇)FlutterORM資料庫
- 歡迎大家觀顧【圖靈教育社群】圖靈
- 深入 Django 模型層:資料庫設計與 ORM 實踐指南Django模型資料庫ORM
- 為何Rust語言在區塊鏈中應用廣泛? - RedditRust區塊鏈
- 墨天輪訪談 | 葉金榮:GreatSQL開源社群——做中國廣受歡迎的開源資料庫SQL資料庫
- DB-Engines:2019年全球最受歡迎資料庫 MySQL奪冠資料庫MySql
- Python為什麼這麼受歡迎呢?python優勢Python
- 社群自研效能評測工具,歡迎試用!
- 聊聊何為圖資料庫和圖資料庫的小知識資料庫
- [開源] .Net 使用 ORM 訪問 華為GaussDB資料庫ORM資料庫
- 恆訊科技分析:哪些是跨境電商最受歡迎的資料庫?資料庫
- Python語言具有哪些優秀特徵?為什麼受歡迎?Python特徵
- 想成為高階程式設計師?最受歡迎的十大資料庫,全給你了!程式設計師大資料資料庫
- 資料庫週刊34丨首屆達夢資料庫精英挑戰賽啟動;2020(上)最受歡迎資料庫文章…資料庫
- 無程式碼開發為何會受到追捧?
- 歡迎提報 | 2023年龍蜥社群優秀貢獻者評選正式啟動
- 社交交友原始碼app為何受歡迎?它具有哪些功能特點?原始碼APP
- beego的ORM-配置資料庫GoORM資料庫
- 3. 資料庫 database & Eloquent ORM資料庫DatabaseORM
- 推導相等優先順序為何彈出棧頂
- go 寫了個部落格,歡迎圍觀Go
- 相比NoSQL,關聯式資料庫為何不適合儲存影像? - RedditSQL資料庫
- Java現在還受歡迎嗎?Java
- 2018 年最受歡迎的15個Python 庫,成都大資料分析培訓Python大資料
- 墨天輪最受DBA歡迎的資料庫技術文件-巡檢篇資料庫
- 墨天輪最受DBA歡迎的資料庫技術文件-監控篇資料庫