Cách được khuyến nghị để trả lại dữ liệu ad hoc (tùy chỉnh từng trường hợp) từ kho lưu trữ nào không phù hợp với bất kỳ thực thể mô hình nào hoặc mở rộng một số?Dữ liệu đặc biệt và mẫu kho lưu trữ
Ví dụ 101 sẽ là ứng dụng từ xin chào mọi nơi: hệ thống blog. Giả sử bạn muốn tải danh sách các bài đăng có mục nhập bài đăng có một số thông tin bổ sung không tồn tại trong thực thể Bài đăng. Giả sử đó là số lượng nhận xét và ngày và giờ của nhận xét cuối cùng. Điều này sẽ rất tầm thường nếu một người đang sử dụng SQL cũ và đọc dữ liệu trực tiếp từ cơ sở dữ liệu. Làm thế nào tôi có thể làm điều đó một cách tối ưu bằng cách sử dụng mẫu kho lưu trữ nếu tôi không thể đủ khả năng tải toàn bộ các bộ sưu tập các Nhận xét cho mỗi Bài đăng và tôi muốn thực hiện nó trong một lần truy cập cơ sở dữ liệu? Có mô hình thường được sử dụng cho tình huống này không? Bây giờ hãy tưởng tượng rằng bạn có ứng dụng web phức tạp vừa phải trong đó mỗi trang cần một dữ liệu tùy chỉnh hơi khác nhau và không thể tải toàn bộ hệ thống phân cấp (yêu cầu về hiệu suất, bộ nhớ, v.v.).
Một số ý tưởng ngẫu nhiên:
Thêm một danh sách các thuộc tính cho mỗi mô hình có thể được dân cư của các dữ liệu tùy chỉnh.
Thực thể mô hình lớp con theo từng trường hợp và tạo trình đọc tùy chỉnh cho từng lớp con.
Sử dụng LINQ, soạn các truy vấn đặc biệt và đọc các lớp ẩn danh.
Lưu ý: Tôi đã hỏi similar question recently nhưng có vẻ quá chung chung và không thu hút được nhiều sự chú ý.
Ví dụ:
Dựa trên gợi ý trong câu trả lời dưới đây, tôi đang bổ sung thêm một ví dụ cụ thể hơn. Dưới đây là tình hình tôi đã cố gắng để mô tả:
IEnumarable<Post> posts = repository.GetPostsByPage(1);
foreach (Post post in posts)
{
// snip: push post title, content, etc. to view
// determine the post count and latest comment date
int commentCount = post.Comments.Count();
DateTime newestCommentDate = post.Comments.Max(c => c.Date);
// snip: push the count and date to view
}
Nếu tôi không làm bất cứ điều gì thêm và sử dụng một ra khỏi kệ ORM, điều này sẽ dẫn đến n + 1 thắc mắc hoặc có thể là một tải truy vấn tất cả các bài viết và bình luận . Nhưng tối ưu, tôi muốn có thể chỉ thực hiện một SQL mà sẽ trả về một hàng cho mỗi bài bao gồm tiêu đề bài viết, nội dung, vv và số lượng bình luận và ngày bình luận gần đây nhất trong cùng. Điều này là tầm thường trong SQL. Vấn đề là kho lưu trữ của tôi sẽ không thể đọc và phù hợp với loại dữ liệu này vào mô hình. Các ngày tối đa và số đếm đi đâu?
Tôi không yêu cầu cách thực hiện điều đó. Bạn luôn có thể làm điều đó bằng cách nào đó: thêm phương thức bổ sung vào kho lưu trữ, thêm lớp mới, thực thể đặc biệt, sử dụng LINQ v.v., nhưng tôi đoán câu hỏi của tôi là như sau. Làm thế nào đến mô hình kho lưu trữ và phát triển theo mô hình thích hợp được chấp nhận rộng rãi, nhưng dường như chúng không giải quyết trường hợp dường như rất phổ biến và cơ bản này.
Cảm ơn bạn đã chỉ cho tôi điều đó. Tôi đã thêm một ví dụ cụ thể đơn giản và giải thích thêm. –