[討論] ORM or Raw SQL

作者: MacPerson (Gary)   2014-08-03 22:42:36
最近在開發新的專案,與同事在討論ORM的相關問題。
之前以MVC架構在開發網頁時,Model的部分還是用ado .NET,但利用Reflection
的方式,將他映射回類別,所以即使用ado來開發,但模型驗證的部分,還是可以
繼續使用。
之前會繞過ORM以ADO開發的原因是,團隊成員對SQL熟到炸了,不想為了取得資料,
來去學習ORM(學習也是成本),另外ORM也有它的極限,需要用到一堆join跟SQL函數
時,真的不知道該怎麼把他轉為ORM的寫法...
最近的案子,突然決定Model部分全部改為ORM的方式做處理,但是一遇到棘手的複雜查詢
,又非得回到ado的方式來做處理。
想請問大家在工作上,ado的使用者多還是ORM的使用者多?
對於複雜查詢時,又必須以ado的方式來解,或者將他包成stored procedure或view,
再用ORM去excute,這樣感覺像是再走回頭路,明明要去SQL化(物件導向),但一遇到複
雜查詢卻又非得回到ado的方式,Programmer必須得會SQL跟ORM,在程式裡出現2種風
格的model,其實我還蠻無法接受的....
以上跟各位分享與討論.....
(此篇非抱怨文,我已經習慣ORM的作業方式,但無法說服自己,必須在model寫成2種風格)
作者: J002 (阿里山 我來了XD~)   2014-08-03 22:44:00
小弟目前遇到狀況跟您有點類似,但是主要都是用storedprocedure去作複雜的Update… 查詢部份,有心還是可以能湊出來就是了…主要是較複雜的操作,還會有速度問題…
作者: hSATAC (cAt Ash)   2014-08-03 22:49:00
不衝突啊,簡單的東西用 ORM 要優化的地方另外包,很合理。
作者: J002 (阿里山 我來了XD~)   2014-08-03 22:50:00
同組的資深前輩也是秉持跟樓上大大說的觀點一樣…後來某次批次塞資料時…速度真的就有差了0rz是 後來作bulk沒錯XD"
作者: MacPerson (Gary)   2014-08-03 22:54:00
以上2位前輩說的不無道理,不過我concern的點在於,明明ORM就要要將資料操作改為物件導向,易於pg操作與理解,但在複雜查詢時又非得要自己串SQL?這我無法理解....但ORM在程式法撰寫上,的確省了不少時間..
作者: J002 (阿里山 我來了XD~)   2014-08-03 22:58:00
有跟前輩們討論過,這點或許跟資料表正規化程度有關系?有些資料表(特別是翻新現有系統) 正規化的狀況…實在有點慘ORM轉SQL是系統轉的 有時看到轉出來的sql string會發現頗恐怖…
作者: rex1224   2014-08-03 23:04:00
orm沒有什麼不好,只是缺點就是效能問題,假如你的orm是用entity framework的話,你可以下中斷電在linq query的地方就可以看到他轉譯出來的sql string,有時候他真的會幫你亂做很多多餘的事情,我覺得orm對小型專案或者初期poc的系統是好的選擇,但是大型專案就不適合
作者: superpai (超級白)   2014-08-03 23:17:00
複雜查詢ORM辦不到有什麼不好理解的...
作者: MacPerson (Gary)   2014-08-03 23:19:00
就是因為他辦不到,但這個技術卻繼續推,所以才無法理解所以才跟大家分享跟討論....
作者: SecretWhale (鯨魚)   2014-08-03 23:23:00
但也沒什麼技術能真的面面俱全,都是挑著好用的部份用不好用的部份,就折衷或想辦法搞定。畢竟也不是一套拳就打天下的時代,要會變招啊。
作者: chatnoir (對不起)   2014-08-03 23:33:00
這篇很好啊,為什麼要刪,最近我也跟同事在爭執這個問題事實上就是大量Insert或Update時,請用SP或T-SQL一般狀況用ORM技術,因為這對PG來說太方便了,尤其是寫View的時候,資料binding根本無敵好用。 已經回不去了。
作者: J002 (阿里山 我來了XD~)   2014-08-03 23:36:00
推樓上前輩…回不去了0rz
作者: sing10407 (阿U)   2014-08-04 00:49:00
我都把需要用到join等等的寫成view再產生Object
作者: yyc1217 (somo)   2014-08-04 00:50:00
複雜的join寫成view+1簡單的操作用ORM,大量的看能否接受慢速,不能就寫成SQL
作者: mepowerlmay (用心,找對人)   2014-08-04 01:20:00
沒orm我還不是寫的跟飛一樣
作者: kinanson (kinanson)   2014-08-04 08:35:00
ORM是取代ADO.NET沒錯,但ADO.NET不等於sql,你完全可以直接寫SQL把資料處理出來,放進泛型裡面再用LINQ做處理..用過LINQ來處理之後,完全無法回去寫ADO.NET了,要效能的話,我寧願直接寫sp....不過可以挑到底什麼部份,很需要效能的,再寫SP,第一原則還是以程式碼好維護為主
作者: PoloHuang (黃保羅)   2014-08-04 09:18:00
推J002
作者: bejoe (比喬)   2014-08-04 09:31:00
既然這麼喜歡ORM,為什麼不乾脆用nosql就好
作者: SansWord (是妳)   2014-08-04 10:38:00
因為客戶只有,也只想用 db
作者: gmoz ( This can't do that. )   2014-08-04 10:48:00
所以ORM框架都有提供NATIVE QUERY吧(O
作者: f124 (....)   2014-08-04 13:22:00
案子太大要更新實體模型超悲劇的
作者: matrixki (New Season)   2014-08-04 20:54:00
前輩說不要去看ORM的東西怎麼下Query 因為一看會發現他們真的寫得比較好...
作者: rex1224   2014-08-04 23:18:00
樓上不是吧....我怎麼看到的都很慘....XD
作者: YahooTaiwan (超可愛南西我老婆)   2014-08-05 10:42:00
樓上 那跟你的寫法有關 請參照各平台 ORM 的轉換規則
作者: matrixki (New Season)   2014-08-05 23:05:00
推樓上 很多人用ORM沒有正確地使用它也常看到有人寫出N+1 query......

Links booklink

Contact Us: admin [ a t ] ucptt.com