為何資料庫優先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 中。
相關文章
- 為什麼Go語言設計受到歡迎?Go
- 為什麼NoSQL資料庫這麼受歡迎?SQL資料庫
- 簡單是優勢,但為何複雜性還受歡迎?
- 邊緣計算為何會如此受歡迎?
- 手機App在中國更為廣受歡迎–資料資訊圖APP
- 為什麼python大資料受歡迎?Python大資料
- 何為CSS 樣式優先順序CSS
- 最受歡迎的5個Android ORM框架AndroidORM框架
- 為什麼Java能夠持續的受到歡迎呢?原因有這些Java
- 大資料時代,為什麼python大受歡迎?大資料Python
- 墨天輪最受DBA歡迎的資料庫技術文件-SQL優化篇資料庫SQL優化
- 為什麼Javascript在求職中不受歡迎JavaScript求職
- 最受歡迎的 NoSQL 和關係型資料庫SQL資料庫
- 手把手教你在Flutter專案優雅的使用ORM資料庫FlutterORM資料庫
- 最受開發者歡迎的HTAP資料庫PostgreSQL10特性資料庫SQL
- 歡迎大家推薦資料庫的相關職位資料庫
- 手把手教你在Flutter專案優雅的使用ORM資料庫(下篇)FlutterORM資料庫
- 手把手教你在Flutter專案優雅的使用ORM資料庫--下篇FlutterORM資料庫
- 歡迎大家觀顧【圖靈教育社群】圖靈
- 講座:資料庫專案生命週期中的優化 歡迎大家光臨探討資料庫優化
- 墨天輪訪談 | 葉金榮:GreatSQL開源社群——做中國廣受歡迎的開源資料庫SQL資料庫
- 為何Rust語言在區塊鏈中應用廣泛? - RedditRust區塊鏈
- D3,最受歡迎的前端資料視覺化庫前端視覺化
- Room ORM 資料庫框架OOMORM資料庫框架
- 歡迎加入圖靈社群 ituring.com.cn圖靈
- 深入 Django 模型層:資料庫設計與 ORM 實踐指南Django模型資料庫ORM
- 無程式碼開發為何會受到追捧?
- 恆訊科技分析:哪些是跨境電商最受歡迎的資料庫?資料庫
- 社交交友原始碼app為何受歡迎?它具有哪些功能特點?原始碼APP
- 聊聊何為圖資料庫和圖資料庫的小知識資料庫
- 歡迎來到,個人資料安全“世界盃”
- 工作流反思系列:什麼樣的工作流會受到歡迎
- go 寫了個部落格,歡迎圍觀Go
- 想成為高階程式設計師?最受歡迎的十大資料庫,全給你了!程式設計師大資料資料庫
- Java現在還受歡迎嗎?Java
- Python語言具有哪些優秀特徵?為什麼受歡迎?Python特徵
- Python為什麼這麼受歡迎呢?python優勢Python
- Go社群行為準則Go