Mô hình lưu trữ so với tạo đối tượng DAL


9

Theo như tôi đã học, IRepositorynên chứa CRUD. Sau đó, chúng tôi kế thừa điều này IRepositorytrong các Giao diện khác của chúng tôi như IProductvà triển khai IProductlớp cụ thể ProductRepository, với các phương thức như GetAllProducts(), Top5Products().

Chúng ta cũng có thể làm tương tự với kiến ​​trúc n-tier. như, Tạo DAL Class Libraryvà trong nó định nghĩa một lớp Productvới các phương thức như GetAllProducts(), Top5Products().

Trong cả hai DAL.ProductRepo.ProductRepositorylớp chúng ta khởi tạo DB Contextcủa Entity Frameworkvà truy vấn dữ liệu có liên quan của chúng tôi.

Cuộc gọi tương tự trong cả hai Repo.ProductRepositoryhoặc DAL.Productphương thức từBLL

Theo quan điểm của những điểm tương đồng này, câu hỏi của tôi về lợi ích của Repos là gì? Tôi có thể làm tương tự với nhiều dễ dàng sử dụng kiến trúc n-tier với ( Controller, BLL Class Library, DAL Class Library).


@Neil Tôi nghĩ OP đó là quen thuộc với Dal và hỏi xem kho là giao diện chỉ khác để làm những điều tương tự hoặc nếu nó là nhiều
Christophe

@Christophe chính xác, tôi bối rối về điều này. Nếu chúng ta có thể làm tương tự trong DAL tại sao lại sử dụng mẫu repo?
M. Arslan

Câu trả lời:


7

Hiểu biết của tôi là:

  • DAL (Lớp truy cập dữ liệu) đề cập đến một lớp trong phần mềm của bạn nằm giữa công nghệ kiên trì và logic ứng dụng của bạn. Mục đích của nó là để giữ cho mối quan tâm truy cập dữ liệu tách biệt với phần còn lại của mối quan tâm ứng dụng của bạn. Đó là một khái niệm chung .

  • Kho lưu trữ là một khái niệm từ DDD (Thiết kế hướng tên miền).

Trong DDD, Kho lưu trữ có trách nhiệm đóng gói tất cả các mối quan tâm truy cập dữ liệu cho một Tập hợp cụ thể . Điều này đi kèm với trách nhiệm đảm bảo tính nhất quán trong quá trình đọc và viết của Tập hợp. Và một tổng hợp là một nhóm các thực thể có liên quan (ví dụ Product, Store, vv).

Vì vậy, một Kho lưu trữ đặc biệt nhận thức được mối quan tâm về tính nhất quán và tính nhất quán của Tập hợp. DAL chung của bạn rất có thể sẽ bao gồm các Kho lưu trữ cụ thể

TL; DR;

  • DAL là một thuật ngữ chung để trừu tượng hóa các mối quan tâm Truy cập Dữ liệu.
  • Kho lưu trữ là một khái niệm tương tự, nhưng cụ thể hơn, từ DDD.
  • DAL của bạn có thể sẽ bao gồm một số Kho lưu trữ.

4
Kho lưu trữ cũng là một thuật ngữ được sử dụng rộng rãi hơn bên ngoài DDD để chỉ một bộ sưu tập các đối tượng trong bộ nhớ phản ánh các bản ghi cơ sở dữ liệu. Trong bối cảnh này, nó nằm giữa DAL và Lớp Logic nghiệp vụ. Xem martinfowler.com/eaaCatalog/reposeective.html
Robert Harvey

Tại sao mọi người cố gắng cung cấp tín dụng DDD cho tất cả mọi thứ?!
TheCatWhisperer

1
Hôm nay tôi đã học được: P
MetaFight

2

Bạn đang so sánh hai khái niệm khác nhau và bổ sung:

  • Các Data Access Layer là một lớp kiến trúc có ý định tiếp cận trừu tượng dữ liệu. Nó không nói làm thế nào truy cập sẽ được trừu tượng hóa.
  • Các Repository là một mô hình cụ thể mà thuộc về Dal (xem danh sách các mẫu ở phần cuối của liên kết này ). Nó nói chính xác làm thế nào để trừu tượng một quyền truy cập cụ thể vào dữ liệu: bằng cách cung cấp một bộ sưu tập như giao diện cho kho lưu trữ dữ liệu.

DAL trong ví dụ của bạn

Thật thú vị, trong ví dụ của bạn về thư viện lớp, DAL.Productdường như là một kho lưu trữ. Vì vậy, thật bình thường khi bạn không thực sự thấy một sự khác biệt: từ quan điểm thực hiện, nó giống nhau (trong trường hợp cụ thể này).
Nhưng nó không phải; Một DAL có thể được thực hiện khác nhau, ví dụ:

  • hồ sơ hoạt động dựa trên một lớp trừu tượng cơ sở dữ liệu.
  • các đối tượng miền thiếu máu (chú ý, chống mẫu!) thu được từ một cổng dữ liệu hàng
  • hoặc, tại sao không, các đối tượng miền thu được từ các đối tượng truy vấn khác nhau, trong đó mỗi truy vấn sẽ triển khai một cách cụ thể để truy xuất đối tượng
  • kho lưu trữ
  • sự pha trộn của tất cả những người

Có gì khác nhau cho kho lưu trữ

Khái niệm về kho lưu trữ độc lập với mô hình kiến ​​trúc và việc thực hiện. Bạn không cần phải suy nghĩ vào các lớp hoặc cơ sở dữ liệu. Tất cả những gì bạn cần biết khi bạn thiết kế tên miền của mình, đó là các đối tượng của bạn nằm trong kho lưu trữ là một loại phù thủy đặc biệt của bộ sưu tập mang đến sự bền bỉ. Điều này làm cho chúng rất phù hợp cho thiết kế miền và giải thích lý do tại sao chúng là một yếu tố chính của Thiết kế hướng miền .

Trong DDD, các kho lưu trữ có một số quy tắc cần tôn trọng hơn: chúng cung cấp quyền truy cập vào các tập hợp (một thực thể độc lập hoặc một nhóm các thực thể liên quan phụ thuộc vào một gốc tổng hợp) và có một kho lưu trữ trên mỗi tổng hợp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.