2010-09-30 36 views
8

Tôi đã xem qua một vài ORM gần đây đã thông báo rằng họ đang có kế hoạch di chuyển việc triển khai của họ từ Active Record sang Data Mapper. Kiến thức của tôi về chủ đề này rất hạn chế. Vì vậy, một câu hỏi cho những người biết tốt hơn, là Mapper dữ liệu mới hơn Active Record? Đó có phải là khi phong trào Active Record bắt đầu? Làm thế nào để hai liên hệ với nhau?Data Mapper có xu hướng hiện đại hơn Active Record

Cuối cùng vì tôi không phải là người cơ sở dữ liệu và biết rất ít về chủ đề này, tôi nên theo dõi ORM đang chuyển sang triển khai Data Mapper, như tôi đã viết phần mềm (không phải người dữ liệu) ?

Trả lời

19

DataMapper không hiện đại hơn hoặc mới hơn, nhưng chỉ phù hợp hơn với ORM.

Lý do chính khiến mọi người thay đổi là vì ActiveRecorddoes not make for a good ORM. Một AR kết thúc tốt đẹp một hàng trong bảng hoặc chế độ xem cơ sở dữ liệu, gói gọn truy cập cơ sở dữ liệu và thêm logic miền trên dữ liệu đó. Vì vậy, theo định nghĩa, AR là biểu diễn 1: 1 của một bản ghi cơ sở dữ liệu, nó làm cho nó đặc biệt phù hợp với CRUD đơn giản.

Một số người đã thêm tìm nạp dữ liệu liên quan vào AR của họ, điều này khiến mọi người tin rằng AR là ORM. Không phải vậy. Điểm của ORM là để giải quyết các object relational impedance mismatch giữa cấu trúc cơ sở dữ liệu của bạn và các đối tượng miền của bạn. Khi sử dụng AR, bạn không có trở kháng không khớp vì AR của bạn đại diện cho một hàng cơ sở dữ liệu và không phải là một thiết kế OO thích hợp. Bạn đang gắn bố cục db của bạn với các đối tượng của bạn. Một số mô hình hành vi quan hệ đối tượng vẫn có thể được áp dụng mặc dù (ví dụ tải lười).

Một lý do khác khiến AR thường bị chỉ trích là vì nó xen lẫn hai mối quan tâm: logic nghiệp vụ và logic truy cập db. Điều này dẫn đến sự ghép nối không mong muốn và có thể dẫn đến ít khả năng bảo trì và linh hoạt hơn trong các ứng dụng lớn hơn. Không có sự cô lập giữa hai lớp. Khớp nối luôn dẫn đến ít linh hoạt hơn.

A DataMapper Mặt khác, di chuyển dữ liệu giữa các đối tượng và cơ sở dữ liệu trong khi vẫn giữ chúng độc lập với nhau và bản thân người lập bản đồ. Mặc dù khó triển khai hơn nhưng nó cho phép thiết kế linh hoạt hơn nhiều trong ứng dụng của bạn. Các đối tượng miền của bạn không còn phải khớp với cấu trúc db nữa. Lớp DAL và Domain được tách riêng.

0

2 xu của tôi:

DataMapper mới hơn ActiveRecord. Tôi thích cú pháp của DataMapper tốt hơn; nó rõ ràng hơn và ít "huyền diệu" hơn. Tôi có thể gặp nhiều lý do khác, nhưng chúng được liệt kê ở đây: http://datamapper.org/why

ActiveRecord có nhiều tài liệu hơn.

+0

AR và DataMapper là các mẫu thiết kế độc lập về ngôn ngữ. Bạn dường như đang đề cập đến việc triển khai cụ thể trong thế giới RoR, đó không phải là những gì mà OP yêu cầu. – Gordon

+0

Câu hỏi dường như đã thay đổi kể từ khi tôi trả lời :( – phaedryx

+0

Câu hỏi không bao giờ thay đổi Chỉ có các thẻ đã được chỉnh sửa – jblue

Các vấn đề liên quan