Ai đó có thể vui lòng giải thích cho tôi Mẫu Kho lưu trữ trong .NET, từng bước đưa ra một ví dụ hoặc bản demo rất đơn giản.
Tôi biết đây là một câu hỏi rất phổ biến nhưng cho đến nay tôi vẫn chưa tìm được câu trả lời thỏa đáng.
Ai đó có thể vui lòng giải thích cho tôi Mẫu Kho lưu trữ trong .NET, từng bước đưa ra một ví dụ hoặc bản demo rất đơn giản.
Tôi biết đây là một câu hỏi rất phổ biến nhưng cho đến nay tôi vẫn chưa tìm được câu trả lời thỏa đáng.
Câu trả lời:
Tóm lại, tôi sẽ mô tả tác động rộng hơn của mẫu kho lưu trữ. Nó cho phép tất cả các mã của bạn sử dụng các đối tượng mà không cần phải biết các đối tượng được duy trì như thế nào. Tất cả các kiến thức về sự bền bỉ, bao gồm ánh xạ từ các bảng đến các đối tượng, được chứa an toàn trong kho lưu trữ.
Rất thường xuyên, bạn sẽ tìm thấy các truy vấn SQL nằm rải rác trong cơ sở mã và khi bạn đến để thêm một cột vào bảng, bạn phải tìm kiếm các tệp mã để thử và tìm các tập quán của bảng. Tác động của sự thay đổi là sâu rộng.
Với mẫu kho lưu trữ, bạn chỉ cần thay đổi một đối tượng và một kho lưu trữ. Tác động rất nhỏ.
Có lẽ nó sẽ giúp suy nghĩ về lý do tại sao bạn sẽ sử dụng mẫu kho lưu trữ. Dưới đây là một số lý do:
Bạn có một nơi duy nhất để thay đổi quyền truy cập dữ liệu của mình
Bạn có một nơi duy nhất chịu trách nhiệm cho một tập hợp các bảng (thường)
Thật dễ dàng để thay thế một kho lưu trữ bằng một triển khai giả để thử nghiệm - vì vậy bạn không cần phải có sẵn một cơ sở dữ liệu để kiểm tra đơn vị của mình
Cũng có những lợi ích khác, ví dụ, nếu bạn đang sử dụng MySQL và muốn chuyển sang SQL Server - nhưng tôi chưa bao giờ thực sự thấy điều này trong thực tế!
IConnection
, ICommand
, vv phần mà da các loại cơ sở dữ liệu. Các kho lưu trữ thường là miền trung tâm hơn.
Đây là một ví dụ hay: Ví dụ về mẫu lưu trữ trong C #
Về cơ bản, kho lưu trữ ẩn các chi tiết về cách chính xác dữ liệu đang được tìm nạp / lưu giữ từ / đến cơ sở dữ liệu. Dưới vỏ bọc:
IDbContext
) hoặc ISession
trực tiếp trong nhibernate ( ). Một kho lưu trữ được triển khai chính xác trừu tượng hóa TẤT CẢ thông tin cụ thể về tính bền vững (như cách nhà cung cấp Linq To Sql hiện tại hoạt động). tức là không bao giờ phơi bày IQueryable
.
IQueryable
không kiên trì thông tin cụ thể. Sự hỗ trợ của IQueryable có thể đơn giản như một mảng được mã hóa cứng hoặc có thể là từ tệp XML, dịch vụ web, cơ sở dữ liệu, tệp phẳng, v.v. Tôi sẽ không đề xuất một kho lưu trữ không phơi bày IQueryable như mọi khi dẫn đến việc truy cập dữ liệu chậm trong mọi trường hợp, trong đó việc phơi bày IQueryable sẽ cho phép một số trường hợp thực hiện các cải tiến hiệu suất khi áp dụng nếu cửa hàng lưu trữ lâu bền có khả năng đó. Ngoài ra, ẩn DbContext cho phép bạn chuyển sang một ORM khác nếu cần (hoặc không có ORM!)
IN
mệnh đề sql mà không biết nhà cung cấp LinqToSql cụ thể thực hiện việc đó như thế nào.