[讨论] 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