-1

Khác nhau giữa Active Record và Data Mapper

Khi nói đến việc làm việc với dữ liệu trong một ứng dụng, có lẽ bạn sẽ cần một ORM ở dạng này hay dạng khác. ORM là lớp giữa cơ sở dữ liệu và ứng dụng của bạn. Bằng cách sử dụng ORM, rất nhiều công việc khó khăn trong việc tạo, cập nhật, đọc và xóa khỏi cơ sở dữ liệu được chúng ta quan tâm.

Mình nghĩ phần lớn, bạn không cần phải lo lắng về loại ORM nào bạn đang sử dụng.

Tuy nhiên, khi bạn tìm hiểu sâu hơn về cách các ứng dụng được thiết kế ,xây dựng và bạn bắt đầu làm việc trên các ứng dụng có các đặc điểm cụ thể, nó rất đáng để khám phá các loại ORM khác nhau mà bạn chưa biết vì nó đã có sẵn.

ORM là gì và tại sao bạn cần nó?

ORM (Object Relative Mapper) là lớp nằm giữa cơ sở dữ liệu của bạn và ứng dụng của bạn. Trong lập trình hướng đối tượng, bạn làm việc với các đối tượng làm điểm tham chiếu chính của bạn. ví dụ bạn có thể có đối tượng sau:

$user = new User;  
$user->name = ‘philipbrown’; 

Tuy nhiên, các cơ sở dữ liệu như MySQL chỉ có thể lưu trữ các giá trị dưới dạng chuỗi và số nguyên:

+—-+————-+  
| id | username |  
+—-+————-+  
| 1 | philipbrown |  
+—-+————-+  

Một User có nhiều posts trong ứng dụng của chúng tôi. Để lấy lại các bài đăng của user, chúng tôi có thể làm như thế này:

$posts = $user->posts;

Tuy nhiên, trong cơ sở dữ liệu, các bài đăng sẽ được lưu trữ trong một bảng, như thế này:

+—-+———+——-+  
| id | user_id | title |  
+—-+———+——-+  
| 1 | 2 | "…" |  
+—-+———+——-+  

ORM là lớp ma thuật biến đổi dữ liệu dưới dạng đối tượng thành dữ liệu quan hệ có thể được lưu trữ trong cơ sở dữ liệu và ngược lại.

Bây giờ mình đã giải thích ORM là gì và tại sao bạn muốn sử dụng một ORM, bây giờ hãy xem hai triển khai phổ biến nhất của ORM, Active Record và Data Mapper.

Active Record?

Một ví dụ sử dụng điển hình của Active Record:

$user = new User;  
$user->username = ‘philipbrown’;  
$user->save(); 

Các ORM kiểu bản ghi hoạt động ánh xạ một đối tượng vào một hàng cơ sở dữ liệu. Trong ví dụ trên, chúng ta sẽ ánh xạ đối tượng User thành một hàng trong bảng User.

Khi bạn mở tệp mô hình User, bạn sẽ thấy rằng bạn không phải chỉ định các thuộc tính của đối tượng và cách chúng liên quan đến cơ sở dữ liệu. Với ORM kiểu Active Record, mô hình có thể tự động xác định các thuộc tính của mô hình bằng cách xem sơ đồ của cơ sở dữ liệu.

Một trong những lợi ích của kiểu Active Record là bạn có thể gọi phương thức save () trên đối tượng để cập nhật cơ sở dữ liệu một cách đơn giản. Mỗi đối tượng mô hình kế thừa từ một đối tượng Active Record cơ sở và do đó bạn có quyền truy cập vào tất cả các phương thức liên quan đến tính bền vững. Điều này làm cho kiểu Active Record rất dễ bắt đầu vì nó rất trực quan.

Data Mapper?

Sự khác biệt lớn giữa kiểu Active Record và Data Mapper là, Data Mapper tách biệt hoàn toàn miền của bạn khỏi lớp lưu giữ lâu bền. Điều này có nghĩa là không có đối tượng mô hình nào của bạn biết bất cứ điều gì về cơ sở dữ liệu.

Khi sử dụng kiểu Data Mapper, mã của bạn sẽ trông giống như thế này:

$user = new User;  
$user->username = ‘philipbrown’;  

Nhìn chung nó chẳng khác gì so với Active Record style. Tuy nhiên, các đối tượng mô hình Data Mapper chỉ là các đối tượng PHP đơn giản không có kiến thức về cơ sở dữ liệu. Điều này có nghĩa là chúng ta có thể gọi phương thức save () trên đối tượng để duy trì nó vào cơ sở dữ liệu vì nó không tồn tại. Thay vào đó, cần sử dụng một dịch vụ hoàn toàn khác được gọi là Entity Manager:

$user = new User;  
$user->username = ‘philipbrown’;  
EntityManager::persist($user);  

Lợi ích lớn của mẫu Data Mapper là, các đối tượng miền của bạn không cần biết bất cứ điều gì về cách chúng được lưu trữ trong cơ sở dữ liệu. Điều này có nghĩa là các đối tượng của bạn sẽ nhẹ hơn vì chúng không phải kế thừa ORM đầy đủ, nhưng cũng sẽ có một quy trình chặt chẽ hơn, chính thức hơn để tương tác với cơ sở dữ liệu vì bạn không thể gọi phương thức save () ở bất cứ đâu trong code của bạn.

Sự khác biệt giữa Active Record và Data Mapper?

Mình nghĩ rằng cả Active Record và Data Mapper đều có cả mặt tích cực và tiêu cực và tôi chắc chắn không thể nghĩ rằng một mô hình tốt hơn mô hình kia. Cũng như mọi thứ khác trong lập trình, tôi nghĩ câu trả lời đúng cho việc chọn mẫu nào sẽ sử dụng là trên nền tảng của nó. mình nghĩ có hai lĩnh vực chính mà bạn nên đánh giá mẫu nào phù hợp với bạn.

Loại ứng dụng bạn đang xây dựng

Điều đầu tiên cần nghĩ đến là, loại ứng dụng bạn đang xây dựng.

Có hai loại ứng dụng web, ứng dụng dựa trên CRUD và ứng dụng dựa trên miền.

Ứng dụng dựa trên CRUD là nơi mã của bạn ánh xạ sạch tới cơ sở dữ liệu. Thông thường, bạn sẽ tạo, đọc, cập nhật và xóa các thực thể. Bạn cũng có thể có các mối quan hệ giữa các mô hình của mình, nhưng đối với hầu hết các phần, có các quy tắc thực sự nghiêm ngặt về cách các mối quan hệ đó nên được thực thi.

Khi bạn đang xây dựng một ứng dụng có kiểu suy nghĩ cơ sở dữ liệu này, thì Active Record là giải pháp hoàn hảo. Active Record sẽ cho phép bạn nhanh chóng và dễ dàng khởi động và chạy với một ứng dụng đang hoạt động.

Tuy nhiên, nếu ứng dụng của bạn không được xây dựng với tư duy cơ sở dữ liệu này, mà thay vào đó, bạn đang xây dựng một ứng dụng để đáp ứng các quy tắc và quy trình của một doanh nghiệp, mẫu Data Mapper có thể là lựa chọn tốt hơn. Mẫu Data Mapper sẽ thực thi một số hạn chế nhất định trong việc xử lý dữ liệu và tính bền vững và nó sẽ cho phép bạn gói gọn các quy tắc kinh doanh đó trong các thực thể của mình.

Ứng dụng và môi trường bạn đang xây dựng

Thứ hai, tôi nghĩ rằng bản chất của ứng dụng và môi trường bạn đang xây dựng nó cũng nên là một yếu tố khi căn cứ vào quyết định của bạn về việc sử dụng mẫu nào.

Nếu bạn đang xây dựng một ứng dụng sản phẩm khả thi tối thiểu để kiểm tra vùng nước của một thị trường mới, tôi nghĩ sẽ hợp lý hơn khi sử dụng mẫu Active Record. Lúc đầu, bạn không biết những quy tắc kinh doanh nào sẽ trở nên quan trọng và bạn sẽ không bao giờ làm thế nếu bạn ám ảnh về kiến trúc của ứng dụng.

Mặt khác, nếu bạn đã được đưa vào một doanh nghiệp hiện có để xây dựng một ứng dụng mới từ một hệ thống cũ, tôi nghĩ việc sử dụng mẫu Data Mapper sẽ có ý nghĩa hơn. Một doanh nghiệp hiện tại sẽ có các quy tắc và quy trình xung quanh cách thức hoạt động kinh doanh của họ. Bằng cách sử dụng mẫu Active Record, cuối cùng bạn sẽ cố gắng buộc các quy tắc kinh doanh đó chơi độc đáo với cơ sở dữ liệu tư duy của cơ sở dữ liệu trực tuyến. Mẫu Data Mapper sẽ cho phép bạn đóng gói các quy tắc miền của doanh nghiệp để làm việc với ứng dụng rõ ràng và trực quan.

Cảm ơn bạn đã đọc bài viết của mình nhé 😃


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí