關於ORM和存儲過程的一些看法

1)理念的區別
 
從sql或存儲過程開始設計的開發,是面向關係型數據庫的,後來面向對象開發興起,人們發現面向數據庫和麪向對象思維方面不太一致,匹配有障礙。就出現了ORM,希望以面向對象化的思維設計程序,然後通過這個ORM工具,映射到關係數據庫中。
 
ORM的目的,就是先設計對象,然後再映射到關係數據庫,終極目標就是希望軟件開發的過程,完全以面向對象的方式來設計。一個完美的ORM,即使開發者完全不會數據庫也可以使用。當然,終極目標和完美境界,都是不存在的。
 
2)實際的作用
 
ORM在實際開發中帶來的幫助,我覺得主要還不是面向對象的設計方式的變革,而是它作爲一個引入的中間層,帶來了額外的好處:
a)大多數數據庫操作都更加方便簡單了(許多人都離不開ORM,就是因爲極度的方便)
b)更不容易犯數據庫操作中的一些低級錯誤,比如重複的sql查詢、比如大量的注入***漏洞等等
c)屏蔽了數據庫的差別,可以支持多種數據庫
……
 
而在實際開發中,缺點也很明顯,就是關係數據庫最擅長的複雜查詢,ORM明顯力不從心,不僅僅是wojilu ORM,凡是有經驗的ORM使用者,比如hibernate方面的開發人員,一般也不會用ORM做複雜的查詢。
 
關於存儲過程,特別談一下我的看法。
 
如果關注過微軟出的一些示例程序,發現都是把複雜的業務邏輯放在存儲過程中,中間層只要簡單調用一下這個存儲過程就可以了,代碼看起來非常清爽整潔。但許多人認爲(包括我),它有幾個缺點:
 
a)過於依賴數據庫,甚至可以說,這種開發方式,基本上在微軟的特定數據庫上綁定死了。也可以說,這種開發方式的出發點,很大程度上是有利於微軟的商業利益的。
 
b)存儲過程不利於維護和業務邏輯的複用、分解和重構。你是數據庫高手,也許不覺得什麼,但對於水平不等的其他程序員,維護或調試修改其他人的存儲過程,往往是一場災難。
 
c)雖然存儲過程的重要優點,是提高性能,但在實際場景中的後果卻是阻礙了性能。具體講,相對於sql,存儲過程雖然有那麼一些性能優勢,但因爲綁定死了特定數據庫,反而不利於數據庫的垂直分區和水平分區。同時,海量數據下,大量使用nosql數據庫(非關係型數據庫)等其他方式的存儲,已經是必經之路,存儲過程成了這方面巨大的障礙。
 
最後,我覺得ORM應該是一個必備工具,但它不能代替原生的數據庫操作,在複雜的查詢需求下,sql或存儲過程還是很有必要的。我覺得以ORM爲主,輔之以sql或存儲過程,是比較實用的策略。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章