ORM 是什么?ORM 的优缺点是什么?
2023年2月9日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
ORM 是什么?
在后端开发上,通常都要与资料库做操作(新增、修改、删除、查找),而与资料库沟通的流程如下:
后端会撰写 SQL 语句,并且透过一些工具或套件(例如:pymysql)向 SQL 资料库来做沟通。而撰写原生 SQL 的缺点为:
- 不可维护性:代码难阅读且不易维护。
- 不可重用性:通常不容易被重用,每个 SQL 语句都需要独立编写并维护。
- 容易犯错:容易犯错,容易缺少引号、忘记加条件等。
- 容易被攻击:容易遭到 SQL Injection 攻击。
- 资料库迁移问题:针对 MySQL 开发的 SQL 语句就没办法直接应用到 Oracle 上的资料库。
为了解决上述问题,ORM 是再往上进行一层封装,而无需去编写原生的 SQL 语句,取而代之的是基于物件导向的思想去编写 Class、Object、Method 等。而 ORM 会再生成 SQL 语句再往下去执行,如下图所示。
ORM 优缺点为何?
优点
- 提高生产力:使用 ORM 可以简化资料库操作的代码,让开发人员专注于应用程式的逻辑。
- 提高可维护性:ORM 抽象了底层的资料库细节,使得代码更容易维护。
- 提高抽象性:ORM 把资料库表格与物件之间的映射关系隐藏起来,使得开发人员不必直接与资料库打交道。
- 移植性好:如果未来需要更换资料库,使用 ORM 可以轻松移植代码,而不需要大量修改。
- 提高安全性:ORM 可以通过防止 SQL 注入攻击等方式,提高应用程式的安全性。
缺点
- 效能问题:由于 ORM 在背后进行了大量的转换与映射,因此可能会比直接使用原生 SQL 语句慢一些。
- 复杂性:ORM 本身就是一个复杂的系统,因此它的学习曲线很陡峭。
- 抽象性问题:ORM 把资料库与应用程式隔离,因此开发人员可能不能完全了解资料库的运作方式。
- 版本问题:不同版本的 ORM 可能有不同的功能和接口,因此在升级时需要注意代码的兼容性。
- 实现上的差异:不同的 ORM 可能有不同的实现方式,因此在选择 ORM 时需要考虑适合的需求。
总的来说,ORM 的选择取决于应用程式的特定需求和优先顺序。如果需要简化代码,提高生产力和可维护性,那么 ORM 是一个不错的选择。但是,如果对资料库的效能和细节有特殊的需求,那么可能需要使用原生的 SQL 语句。