2012-03-07 17 views

Trả lời

17

Trước hết - như thường lệ - trong MVVM bạn không để làm điều gì đó, nó là một đề nghị hoặc thực hành tốt nhất. Nói chung, bạn được tự do mã truy cập dữ liệu vào mô hình khung nhìn của bạn - và để làm như vậy có thể là một thực hành tốt cho các dự án nhỏ hoặc triển khai nguyên mẫu.

Tuy nhiên, bạn nên xem xét điều này cũng có một số hạn chế. Lý do để thực hiện một dịch vụ dữ liệu là thành phần này có thể tái sử dụng và thậm chí có thể sử dụng được trong các kịch bản khác như ứng dụng MVC. Hơn nữa, nó tách ra mối quan tâm của việc lấy mô hình từ một kho dữ liệu.

Lý do triển khai IDataService là bạn có thể trao đổi việc triển khai khi cần, ví dụ: để cung cấp dữ liệu thời gian thiết kế. Khi bạn cần điều này, bạn cũng phải xem xét sự đảo ngược của mẫu điều khiển phụ thuộc rất nhiều vào các giao diện. Trong trường hợp này cũng là một container IOC có thể là thú vị, mặc dù không cần thiết.

Tuy nhiên, trước hết là các đề xuất, mẫu, nguyên tắc thiết kế và thực tiễn tốt nhất cho phép bạn tự do thiết kế ứng dụng phù hợp nhất với yêu cầu của mình.

Chỉnh sửa: kích thước của dịch vụ dữ liệu

Việc thiết kế và phạm vi của dịch vụ dữ liệu của bạn phụ thuộc vào ứng dụng của bạn và nó yêu cầu. Nó có thể từ một dịch vụ dữ liệu duy nhất cho tất cả các mô hình của bạn đến một dịch vụ dữ liệu cho mỗi mô hình. Hơn nữa, việc thiết kế các giao diện dịch vụ dữ liệu của bạn có thể là một quyết định riêng biệt. Một lớp dịch vụ có thể thực hiện một số giao diện dịch vụ, do đó cho phép ẩn một số khía cạnh (phương thức) của việc triển khai thực hiện từ người dùng.

Khi thiết kế dịch vụ dữ liệu, bạn nên xem xét các mẫu unit of workrepository. Có một số triển khai mẫu xung quanh.

Nếu bạn chỉ cần một đơn vị công việc rất đơn giản dựa trên một truy vấn duy nhất, bạn có thể xem blog, nơi tôi viết về việc biến một IQueryable thành đơn vị công việc. Tuy nhiên, điều này chỉ phù hợp với các trường hợp rất đơn giản, thường là việc triển khai hoàn chỉnh với một kho lưu trữ và một đơn vị công việc thích hợp được khuyến khích hơn.

+0

Obalix: thanks.but tôi có nên tạo một dịch vụ dữ liệu cho bất kỳ lớp nào trong mô hình không? –

+1

@raha: xem chỉnh sửa. – AxelEckenberger

+0

Obalix: cảm ơn, rất hữu ích :) Tôi thực sự đánh giá cao nó. –