Python 板


LINE

※ 引述《StubbornLin (Victor)》之铭言: ※ 引述《wil771126 (雨的印记)》之铭言: (恕删) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.170.171.45
1F:推 wawawa:个人认为 ORM 不是万能 用的人还是需评估导入 ORM 的必要性 07/31 20:57
2F:→ StubbornLin:orm当然不是万能 sqlalchemy不只可以当orm用 08/02 15:06
3F:→ StubbornLin:他也有sql语法产生器可以用 08/02 15:06
4F:推 huggie:导入ORM需要考量什麽? 08/03 16:27
5F:推 qrtt1:了解黑盒子内的 side effect,以及开发人员的接受程度.etc 08/04 15:17
藉这个机会来说说我对 orm 的看法 有错误或是不正确的地方欢迎各位大大指正... Orz 首先我想说的是, Python 有订定 DB 存取的介面: PEP 249 -- Python Database API Specification v2.0 所以介面上的存取其实不太需要像是 Perl / Ruby / Php 还需要导入一层 DBI / PDO 来介接,这也意味着要换资料库其实修改的部分已经可以降到最低, 所以 "我觉得" 在 Python 的世界里,"引入 orm 可以让转换 DB 更容易" 其实不是说服人导入 orm 的理由。再来,仔细想一下 orm 的优势到底在哪里? 何时适用呢?现在各个 web framework 都内建了各式的 orm,为什麽它们都要用 orm 来做为存取资料库的介面? 因为 web app "在本质上" 就是一个接收要求 -> 存取资料库的行为,也就是说 web app 一般来说都会 "频繁的存取资料库"。因此何时需要导入 orm,那就是你的专案 本质上就是会非常频繁的和资料库沟通,这时候如果撰写 sql,对程式开发人员来说, 会让程式码变的很肮脏,sql 和程式码混杂在一起。此时引入 orm,可以有效降低 sql 出现在程式码当中的机率,私以为专案有这样的属性,才需要考虑使用 orm。 ---- 但是引入 orm 会有什麽问题呢? 1. 首先是稳定性的问题,我所说的不是单单指该 orm 套件有没有 bug的稳定性, 还包含了API 的稳定性。基本上引用了一个外部的函式库,我觉得在某种程度上来说, 等於是将程式的稳定性外包给别人。如果该函式库维护者很有经验,很注重向後相容, 也许真的就能符合 DRY 原则,让你可以将时间拿去做别的事... 这点我觉得 Python 社群的函式库都还颇稳定的,不过这点仍然需要纳入考量。 在最好的情况下就是该函式库很稳定,你都可以不用理会这块,那 DRY 原则就是 Don't Repeat Yourself. 反之呢,就是第三方函式库有大大小小的问题,你花在 patch 的时间大於 自己重写的时间,这时我戏称 DRY 原则是 DO Repeat Yourself. 某程式语言的第三方函式库这点我觉得有点严重... (以下抱怨省略三千字) 2. 学习此函式库的时间。复杂的函式库就是要花时间去学习。而且你得花时间精熟。 有人也许认为干麻精熟,能用就好啦。这时就要引经据典 (XD):人月神话有提到 在团队中最好要有所谓的工具专家。所以如果你的团队中有此 orm 专家,那好,问题 还不大。如果大家都不是很熟,那遇到问题或地雷或 scaling 的问题那就要 烧香拜拜了... 3. 适用度。 orm 到底适不适用你的专案,你得仔细评估。如果未来你的专案会 一直长大,导致DB 存取频繁,这时用 orm 会雪上加霜... 当然现在大部分的 orm 都有可以直接用 raw sql 的方式,不过一但你用了 raw sql... 那用 orm 的意义...? 的确是可以减少 sql 数量,但是此时你的程式码会混杂 orm 逻辑以及 raw sql, 对後面接手的人来说真的比较好维护?这需要思考。 再来,如果你专案未来可能会用到各个资料库的 store procedure、 或是一些特殊的功能,那 orm 也不太适用... ---- 简单来说,我个人是觉得 orm 有其适用性,而且它带来益处的同时,也会带来坏处, 需要评估的地方不少就是...以上是小弟的心得... 有错请鞭小力一点... Q_Q --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.114.249
6F:推 rellik:推荐这篇文章 08/06 00:45
7F:→ wawawa:补充一下... 针对自己专案开发的 orm 不在我说的范围内... 08/06 00:48
8F:→ wawawa:我说的是直接引用现成的第三方 orm 函式库所造成的问题 08/06 00:49
9F:推 godfat:头猜没说出来的是 ruby... XD 08/06 01:06
10F:推 rellik:楼上是ruby版主 XDD 08/06 01:09
11F:推 huggie:解释得清楚,推一个 08/06 14:04
12F:→ huggie:没做过很大的project,请问 scaling 通常会需要什麽? 08/06 14:04
13F:→ wawawa:楼上的命题范围好大... XD 08/06 22:40
14F:推 huggie:是这样阿?!..真的没做过哈哈 08/10 17:25
15F:推 violencedudu:推! 受益匪浅 01/11 00:55







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP