Tôi đã tìm thấy hai mẫu có cùng mục đích - sự khác biệt là gì?Mẫu Mô hình Dữ liệu khác với Mô hình Kho lưu trữ như thế nào?
http://martinfowler.com/eaaCatalog/dataMapper.html
http://martinfowler.com/eaaCatalog/repository.html
Tôi đã tìm thấy hai mẫu có cùng mục đích - sự khác biệt là gì?Mẫu Mô hình Dữ liệu khác với Mô hình Kho lưu trữ như thế nào?
http://martinfowler.com/eaaCatalog/dataMapper.html
http://martinfowler.com/eaaCatalog/repository.html
[Repository là] một lớp trừu tượng trên bản đồ lớp nơi mã xây dựng truy vấn được tập trung.
Các DataMapper
đảm bảo phía DB của hàng rào không cần phải biết về các chi tiết cụ thể của logic kinh doanh của bạn và làm thế nào dữ liệu được lưu giữ trong bộ nhớ bởi các đối tượng doanh nghiệp của bạn và phía doanh nghiệp của bạn của hàng rào không cần phải biết cách lưu trữ dữ liệu.
Để minh họa, hãy xem xét dữ liệu của bạn được lưu giữ trong DB dưới dạng một tập hợp các hàng, cho biết mỗi hàng đại diện cho một mục trong cửa hàng của bạn. Ở phía bên trong bộ nhớ, bạn có thể muốn giữ thông tin đó không phải là danh sách StoreItem
nhưng dưới dạng hai danh sách, một danh sách cho các mục có trong kho và một cho các mặt hàng không có sẵn. Nó sẽ là công việc của DataMapper
để xử lý việc chuyển đổi giữa một danh sách và hai danh sách.
Bạn có thể làm phức tạp mọi thứ bằng cách thêm danh sách các đối tượng khác và thừa kế ở phía doanh nghiệp của hàng rào. Các 'DataMapper' sẽ phải dịch và từ đó đại diện cho DB quan hệ.
'Kho lưu trữ' cung cấp chức năng "SELECT * FROM table WHERE condition" cho phía doanh nghiệp. Bạn cung cấp một bộ lọc và nó sẽ trả về một bộ sưu tập các đối tượng phù hợp với bộ lọc đó.
Tóm lại: giao dịch 'DataMapper' với các đối tượng đơn lẻ, 'Kho lưu trữ' giao dịch với các bộ sưu tập đối tượng và mở rộng khi chức năng được cung cấp bởi 'DataMapper'.
Giải thích hay, bạn có thể đưa ra ví dụ về cách chúng có thể khác nhau không. Từ những gì tôi thấy trong các khung công tác Java, .NET và PHP, hai khái niệm dường như được sử dụng thay thế lẫn nhau và nó rất khó hiểu. –
@LordYggdrasill Nếu bạn có một vấn đề cụ thể với một khuôn khổ cụ thể, bạn nên trình bày nó dưới dạng một câu hỏi trên trang web này. Truy vấn và ánh xạ là các nhiệm vụ khác nhau một cách hợp lý, nhưng việc triển khai * của chúng thường được kết hợp chặt chẽ, có thể giải thích tại sao một số (cần dẫn chứng) có thể chọn xem xét chúng lại với nhau. – Andrei
Ở đây tôi có một ví dụ từ trang web của ASP.NET. Như bạn có thể thấy, việc triển khai mẫu Repository của họ trông giống hệt như Mapper dữ liệu của Martin Fowler ở POEAA. Bạn có biết cách giải thích hiện tượng này không? Có lẽ kho lưu trữ của ASP.NET là trong thực tế một người lập bản đồ dữ liệu? http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns- in-an-asp-net-mvc-application –
Nếu trình ánh xạ dữ liệu của bạn quá lớn hoặc xử lý lượng truy vấn lớn hơn các đối tượng ánh xạ thực sự, bạn giới thiệu một lớp khác để tập trung vào truy vấn một phần, mà bạn đặt tên nó làm mẫu kho lưu trữ. – Rockstart