Giới thiệu
Ánh xạ quan hệ đối tượng (ORM) là một kỹ thuật cho phép bạn truy vấn và thao tác dữ liệu từ cơ sở dữ liệu bằng cách sử dụng mô hình hướng đối tượng. Khi nói về ORM, hầu hết mọi người đều đề cập đến một thư viện thực hiện kỹ thuật Lập bản đồ quan hệ đối tượng, do đó cụm từ "một ORM".
Thư viện ORM là một thư viện hoàn toàn bình thường được viết bằng ngôn ngữ bạn chọn, đóng gói mã cần thiết để thao tác dữ liệu, vì vậy bạn không sử dụng SQL nữa; bạn tương tác trực tiếp với một đối tượng trong cùng ngôn ngữ bạn đang sử dụng.
Ví dụ, đây là một trường hợp hoàn toàn tưởng tượng với ngôn ngữ giả:
Bạn có một lớp sách, bạn muốn lấy tất cả những cuốn sách mà tác giả là "Linus". Theo cách thủ công, bạn sẽ làm một cái gì đó như thế:
book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
book = new Book();
book.setAuthor(row.get('author');
book_list.add(book);
}
Với thư viện ORM, nó sẽ trông như thế này:
book_list = BookTable.query(author="Linus");
Phần cơ học được chăm sóc tự động thông qua thư viện ORM.
Ưu và nhược điểm
Sử dụng ORM giúp tiết kiệm rất nhiều thời gian vì:
- DRY : Bạn chỉ viết mô hình dữ liệu của mình ở một nơi và việc cập nhật, duy trì và sử dụng lại mã dễ dàng hơn.
- Rất nhiều thứ được thực hiện tự động, từ xử lý cơ sở dữ liệu đến I18N .
- Nó buộc bạn phải viết mã MVC , cuối cùng, làm cho mã của bạn sạch hơn một chút.
- Bạn không cần phải viết SQL kém hình thành (hầu hết các lập trình viên Web thực sự thích nó, bởi vì SQL được coi như ngôn ngữ "phụ", trong thực tế, nó là một ngôn ngữ rất mạnh mẽ và phức tạp).
- Vệ sinh; sử dụng các báo cáo hoặc giao dịch được chuẩn bị dễ dàng như gọi một phương thức.
Sử dụng thư viện ORM linh hoạt hơn vì:
- Nó phù hợp với cách mã hóa tự nhiên của bạn (đó là ngôn ngữ của bạn!).
- Nó trừu tượng hóa hệ thống DB, vì vậy bạn có thể thay đổi nó bất cứ khi nào bạn muốn.
- Mô hình bị ràng buộc yếu với phần còn lại của ứng dụng, vì vậy bạn có thể thay đổi hoặc sử dụng nó ở bất kỳ nơi nào khác.
- Nó cho phép bạn sử dụng tính tốt của OOP như kế thừa dữ liệu mà không phải đau đầu.
Nhưng ORM có thể là một nỗi đau:
- Bạn phải học nó và các thư viện ORM không phải là công cụ nhẹ;
- Bạn phải thiết lập nó. Vấn đề tương tự.
- Hiệu suất ổn đối với các truy vấn thông thường, nhưng một bậc thầy SQL sẽ luôn làm tốt hơn với SQL của riêng mình cho các dự án lớn.
- Nó trừu tượng hóa DB. Mặc dù không sao nếu bạn biết những gì xảy ra đằng sau hậu trường, đó là một cái bẫy cho các lập trình viên mới có thể viết những tuyên bố rất tham lam, giống như một cú đánh nặng nề trong một
for
vòng lặp.
Làm thế nào để tìm hiểu về ORM?
Vâng, sử dụng một. Cho dù bạn chọn thư viện ORM nào, tất cả đều sử dụng các nguyên tắc giống nhau. Có rất nhiều thư viện ORM ở đây:
Nếu bạn muốn thử một thư viện ORM trong lập trình Web, tốt hơn hết bạn nên sử dụng toàn bộ ngăn xếp khung như:
- Symfony (PHP, sử dụng Propel hoặc Học thuyết).
- Django (Python, sử dụng ORM nội bộ).
Đừng cố viết ORM của riêng bạn, trừ khi bạn đang cố gắng học một cái gì đó. Đây là một công việc khổng lồ, và những người cũ đã mất rất nhiều thời gian và công việc trước khi chúng trở nên đáng tin cậy.