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.
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
Câu hỏi dường như đã thay đổi kể từ khi tôi trả lời :( – phaedryx
Câu hỏi không bao giờ thay đổi Chỉ có các thẻ đã được chỉnh sửa – jblue