2012-03-22 28 views
6

Tôi có một kho lưu trữ thực hiện giao diện IRepository. Kho lưu trữ thực hiện các truy vấn trên khung thực thể (thay mặt) ứng dụng và trả về trực tiếp đối tượng thực thể được tạo ra.Các đối tượng thực thể có nên được kho lưu trữ không?

Toàn bộ điểm khi triển khai IRepository là để nó có thể được chuyển sang các kho lưu trữ khác nhau trong tương lai. Tuy nhiên việc trả về các đối tượng thực thể chính xác như được trả về bởi Entity Framework sẽ phá vỡ điều này. điều này có chấp nhận được không?

Vì vậy, kho lưu trữ có nên chuyển đổi tất cả các đối tượng Khung thực thể thành đối tượng kinh doanh trước khi hiển thị chúng cho ứng dụng không? Các đối tượng đó có nên thực hiện giao diện hoặc có loại cơ sở chung không?

+1

'Kho lưu trữ khác nhau' nào bạn muốn hỗ trợ. Bạn có nghĩa là chuyển từ EF sang NHibernate? Nếu đúng như vậy, bạn có thể sẽ phải chịu nhiều thay đổi hơn giao diện IRepository. –

+0

Tôi đã không suy nghĩ về bất cứ điều gì đặc biệt nhưng tôi muốn ứng dụng của tôi được mạnh mẽ. Bạn đang nghĩ gì về những thay đổi khác? –

Trả lời

10

Giao diện kho lưu trữ chỉ xử lý với đối tượng doanh nghiệp/tên miền, đó là kho lưu trữ và chỉ nhận các đối tượng được ứng dụng biết đến, đối tượng không liên quan đến triển khai truy cập tiềm ẩn cơ bản.

Thực thể EF hoặc Nhibernate đang lập mô hình dữ liệu kiên trì NOT các tên miền. Vì vậy, IRepository không nên trả về một đối tượng mà là một chi tiết thực hiện của ORM, nhưng một đối tượng có thể được sử dụng trực tiếp bởi ứng dụng (hoặc một thực thể miền hoặc một mô hình xem đơn giản, tùy thuộc vào hoạt động).

Trong triển khai kho lưu trữ, bạn xử lý các thực thể ORM sẽ được ánh xạ tới các thực thể ứng dụng tương ứng (thường là với trình ánh xạ chẳng hạn như AutoMapper). Câu chuyện dài ngắn, khi thiết kế IRepository quên tất cả về việc thực hiện nó. Đó là lý do tại sao tốt hơn là thiết kế giao diện trước khi quyết định nếu/ORM sẽ được sử dụng.

Về cơ bản, kho lưu trữ là cổng nối giữa bối cảnh miền ứng dụng và bối cảnh persitence và ứng dụng KHÔNG được kết hợp với các chi tiết triển khai của kho lưu trữ.

+0

+1 Xác nhận lý do tôi đã đặt câu hỏi này –

1

Bạn nên xem xét sử dụng một trong các mẫu POCO để tạo các thực thể của bạn. Bằng cách đó, các thực thể của bạn không có phụ thuộc đặc biệt trên Entity Framework, và có thể được truyền tự do giữa các lớp. Nó tiết kiệm rất nhiều nỗ lực so với việc duy trì một mô hình miền hoàn toàn riêng biệt và ánh xạ giữa hai (trừ khi mô hình miền của bạn sẽ khác biệt đáng kể so với mô hình thực thể của bạn, trong trường hợp này sẽ có ý nghĩa hơn).

0

Nếu bạn đang sử dụng các thực thể POCO, bạn có thể giả định rằng bất kỳ nhà cung cấp nào cũng sẽ thực hiện một công việc tương tự. Ngoài ra, hãy nhớ rằng bạn đang trả về các thực thể, các thuộc tính của chúng được ánh xạ tới cơ sở dữ liệu. Vì vậy, bạn có thể giả định rằng trừ khi các thực thể có tên thuộc tính khác nhau cho mỗi nhà cung cấp (tôi không thể tìm thấy giải thích hợp lý về việc có tên khác), bạn có thể trả lại chúng từ kho lưu trữ đến doanh nghiệp trực tiếp.

Các vấn đề liên quan