Có phải chúng ta đang sử dụng mô hình kho lưu trữ phải không?


14

Chúng tôi đang sử dụng một loạt các lớp riêng biệt được thêm -repositoryvào để lấy dữ liệu từ cơ sở dữ liệu; cho mỗi bảng kho lưu trữ riêng của nó.

Ví dụ, chúng ta có một customerrepositorylớp có tất cả các loại phương thức để lấy khách hàng và một lớp vacancyrepositorycó tất cả các loại phương thức để lấy chỗ trống.

Tôi có hai câu hỏi về cách làm này:

  1. Làm thế nào về việc lấy dữ liệu kéo dài nhiều bảng? Chẳng hạn, tôi có một màn hình hiển thị tất cả các khách hàng chưa tạo chỗ trống. Một customerrepositoryphương thức sử dụng từ vacancyrespository, hoặc cả hai kho lưu trữ đều trả về kết quả và có một lớp nào cao hơn trong hệ thống phân cấp (hãy đặt tên là a dataservice) để lấy kết quả từ cả hai kho lưu trữ và kết hợp chúng thành 1 kết quả không?

  2. một kho lưu trữ như vậy có thể xử lý bao nhiêu logic?
    Tôi nghĩ sẽ ổn khi triển khai 'where active == true' trong kho lưu trữ để chỉ truy xuất các bản ghi hoạt động hoặc thậm chí logic đơn giản đó sẽ được xử lý bởi một lớp cao hơn trong hệ thống phân cấp (hãy đặt tên là a dataservice)?

Ví dụ tôi đang chạy đến bây giờ là ví dụ này:

Chúng tôi có một danh sách câu hỏi, trong đó có một hoặc nhiều câu hỏi.
Câu hỏi có thể có một kết quả, được giữ trong một bảng riêng biệt.
Vì vậy, khi bạn muốn lấy tổng số kết quả của danh sách câu hỏi, bạn phải kết hợp dữ liệu từ questionlistbảng, bảng câu hỏi và questionstatusbảng.

Ngay bây giờ chúng tôi có 3 kho khác nhau cho các bảng này.

Nếu tôi hỏi questionlistrepositorytổng số kết quả của danh sách số 12, thì nó sẽ phải lấy dữ liệu từ hai kho lưu trữ khác và do đó có một số logic trong đó, điều đó có được phép không?

Hoặc có một questionlistdataservicetrong đó biết những kho lưu trữ để sử dụng?

Một điều nữa: kho lưu trữ của chúng tôi có thể dẫn IQueryableđến một dịch vụ gọi điện có thể dễ dàng kết hợp các kết quả, nhưng khi đó không phải là trường hợp này, tôi không nghĩ nên lấy tất cả nội dung của cả ba bảng từ cơ sở dữ liệu.


1
Thông thường trong nhiều lần truy cập bảng, bảng chiếm ưu thế được xác định bởi bảng của bản ghi phải tồn tại trước khi truy vấn tìm nạp nó. Trong LEFT OUTER THAM GIA, đó sẽ là bảng đầu tiên được đề cập và trong RIGHT OUTER THAM GIA, nó sẽ là bảng thứ hai.
Neil

Câu trả lời:


15

Kho lưu trữ trả về các đối tượng miền và được xây dựng trên đầu các lớp ánh xạ. Đối với một đối tượng miền miền rất đơn giản và các bảng cơ sở dữ liệu có thể rất giống nhau.

Nếu kho lưu trữ của bạn luôn trả về đại diện chính xác cho cấu trúc dữ liệu của bạn thì đó thực sự có thể là Cổng dữ liệu bảng hay còn gọi là Đối tượng truy cập dữ liệu (DAO).

Ví dụ: Cơ sở dữ liệu của bạn có các bảng cho người và địa chỉ. Trong địa chỉ miền ứng dụng của bạn không phải là một thực thể của chính nó, nó chỉ là một tài sản của Person. Trong trường hợp này, bạn sẽ không có PersonRep repository và addressRep repository. Bạn chỉ cần có PersonRep repository. Tên miền không nên quan tâm làm thế nào dữ liệu miền vẫn tồn tại. Những responsibilites nằm trong một lớp phía sau kho lưu trữ.

Từ ví dụ của bạn, có vẻ như bạn thực sự có DAO và vừa đặt tên chúng là Kho lưu trữ.


Vì vậy, khi tạo một kho lưu trữ, tôi cũng có thể có một cổng dữ liệu Bảng sâu hơn một cấp và các kho lưu trữ của chúng tôi thực sự là TDG.
Michel

1
Bạn có thể, nhưng cân nhắc chi phí và lợi ích. Đừng để bị bắt nạt trong việc giữ các DAO và Kho lưu trữ tách biệt theo nguyên tắc mã "phân lớp". Làm những gì dễ đọc nhất trong trường hợp này. Việc tách và lớp trừu tượng kết quả, có thể hữu ích nếu Kho lưu trữ của bạn có xu hướng thực hiện nhiều lần tái hợp dữ liệu trong DAO.
Mihai Danila
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.