Tại sao mẫu Kho lưu trữ cần thiết trong NHibernate?


13

Tôi đang đọc ứng dụng dựa trên NHibernate chính thức đầu tiên của bạn .

Mặc dù hướng dẫn là tốt và dễ làm theo, tôi tự hỏi tại sao mẫu Kho lưu trữ được sử dụng.

Trong nhiều Add, Update, Removephương pháp trong ProductRepositorythực hiện, mã gần giống - tất cả chúng đều sử dụng các giao dịch, và sự khác biệt là trong "thịt" tức là gọi session.Saveint các Addphương pháp, session.Deletetrong removephương pháp. ( Trang thiếu các neo HTML, nhưng bạn có thể tìm kiếm trang có mã liên quan như public void Remove,public void Add )

Mã đó chỉ "cảm thấy sai".

Tại sao tác giả sử dụng mẫu Kho lưu trữ - nó chỉ để trình diễn việc sử dụng NHibernate hay đó là yêu cầu hoặc một số lý do khác?

Thi thiên Nền tảng của tôi là từ Ruby on Rails bằng ActiveRecord vì vậy tôi đang cố gắng hiểu ý nghĩa của NHibernate hoạt động / được sử dụng.


1
Nếu bạn thích mẫu Bản ghi ACtive thì bạn có thể sử dụng Castle Active Record để ngồi trên đỉnh NHibernate Castleproject.org/activerecord
Ben Robinson

3
Đây là một câu hỏi quan trọng. Có một số tranh cãi về việc có nên sử dụng nó hay không. Ayende đã viết các lập luận của mình để không sử dụng nó trong Kho lưu trữ là Singleton mới

Câu trả lời:


10

Mẫu kho không bắt buộc. Đối với tất cả các mô hình khác là một quyết định "Kiến trúc" mà bạn phải thực hiện đối với nhu cầu kinh doanh của bạn. Nói chung, Mẫu kho lưu trữ được sử dụng để triển khai "Thực thể duy trì liên tục" có nghĩa là các thực thể của bạn không biết gì về cách tự duy trì trên thiết bị lưu trữ của bạn (Cơ sở dữ liệu, XML, TextFile, v.v.). Ví dụ: nếu bạn có một Địa chỉ thực thể thì nó sẽ không chứa logic liên tục (bạn sẽ không tìm thấy bất cứ nơi nào như địa chỉ. Lưu hoặc địa chỉ. Cập nhật) nhưng bạn sẽ chuyển thực thể của mình sang một phương thức lưu trữ có trách nhiệm để duy trì thay đổi


Tôi nghĩ có và không. Phiên NHibernate chính nó là loại kho lưu trữ chung. Vì vậy, việc thêm một kho lưu trữ bổ sung nói chung không có gì khác hơn là thêm một mặt tiền vào đối tượng phiên.

trong thực tế, câu trả lời của tôi bắt đầu như "Mẫu kho lưu trữ là không bắt buộc ..." nó có thể chỉ là một quyết định kiến ​​trúc đưa ra đối với các nhu cầu kinh doanh đó

Tôi hoàn toàn đồng ý về điều đó. Nhưng tôi đã thiếu quan điểm rằng phiên chính nó là một kho lưu trữ, đó là tất cả.

9

Ưu điểm của việc sử dụng mẫu kho lưu trữ là giả định lớp truy cập dữ liệu của bạn, để bạn có thể kiểm tra mã lớp doanh nghiệp của mình mà không cần gọi mã DAL. Có những lợi thế lớn khác nhưng điều này dường như rất quan trọng đối với tôi.


2
+1 mẫu ActiveRecord gây khó khăn cho việc cô lập DAL để chế tạo, thường kết thúc bằng các thử nghiệm đơn vị yêu cầu cơ sở dữ liệu của riêng họ (trong trường hợp thử nghiệm đơn vị trở thành thử nghiệm tích hợp).
MattDavey
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.