Trong phát triển ứng dụng Web hiện nay chắc hẳn ai cũng đã quen với từ khóa ORM(Object Relational Mapping). Ở bài viết này mình sẽ giới thiệu tổng quan về ORM và ưu, nhược điểm của nó.
I. ORM là gì?
Theo Wikipedia: ORM là một kỹ thuật lập trình giúp ánh xạ các record dữ liệu trong hệ quản trị cơ sở dữ liệu sang dạng đối tượng đang được định nghĩa trong các class – một khái niệm phổ biến được sử dụng trong tất cả các ngôn ngữ hiện đại ngày nay như: Java, C#,…
Có hai patterns được áp dụng cho các cách thiết kế ORM khác nhau:
1. Active Record:
Kỹ thuật này sử dụng một object wraps một hàng trong bảng cơ sở dữ liệu hoặc view, đóng gói quyền truy cập sơ sở dữ liệu và cả logic trên dữ liệu đó. Một đối tượng bao gồm cả dữ liệu và hành vi. Dữ liệu này thường mang tính liên tục và phải lưu trữ trong database. Active Record sử dụng cách tiếp cận rõ ràng, minh bạch, đưa logic thao tác dữ liệu vào object domain.
Một số ORM nổi tiếng sử dụng Active Record như: Eloquent, CachePHP,…
2. Data Mapper:
Tiếp theo, Data Mapper là một layer mapper đưa dữ liệu qua lại giữa object và database mà vẫn giữ được tính độc lập giữa chúng và cả giữa chính nó (lớp mapper). Đặc điểm chính là tách biệt với bộ nhớ của database và nhiệm vụ chính là chuyển dữ liệu qua lại giữa 2 lớp.
Một số ORM nổi tiếng sử dụng Data Mapper như: Doctrine, Hibernate,…
II. Ưu và nhược điểm ORM:
Ưu điểm
- Việc chỉnh sửa, maintain, tái sử dụng lại code dễ dàng hơn.
- Việc xử lý dữ liệu được thực hiện một cách tự động.
- ORM được triển khai theo mô hình MVC, khiến code dễ sửa đổi và bảo trì hơn.
- Không cần phải biết quá nhiều SQL vẫn có thể tiếp cận dễ dàng với ORM.
- Model linh hoạt và có thể thay đổi sử dụng ở bất cứ chỗ nào.
- Cho phép tận dụng ưu điểm của OOP như kế thừa dữ liệu.
Nhược điểm
- Với mỗi framework sẽ có một thư viện ORM khác nhau, mất thêm thời gian nghiên cứu và tốn bộ nhớ lưu trữ.
- Performance sẽ không được tốt như Raw SQL đối với dự án lớn.
- ORM được coi là abstracts của Database, nó có thể xảy ra những bài toán N + 1 query.