2010-04-28 23 views
8

[Disclaimer: Tôi ASP.NET MVC Developer]Silverlight 4 RIA Services WCF và MVVM không phải là đơn giản

Hi,

Tôi đang tìm kiếm một số thông lệ tốt nhất với thực hiện MVVM pattern với WCF RIA trong Silverlight 4.

Tôi không tìm cách sử dụng MEF của IoC để định vị ViewModels của mình. Những gì tôi muốn biết là làm thế nào để áp dụng mô hình MVVM với Silverlight 4 và WCF RIA.

Tôi không muốn sử dụng các nội dung khác như Prism hoặc MVVM Light toolkit. Tôi tìm thấy nhiều ví dụ trên Internet cho thấy tuyệt vời như thế nào để kéo và thả một nguồn dữ liệu trên quan điểm và công việc được thực hiện (nó nhắc nhở tôi về sự phát triển VB6 đầu tiên của tôi).

Tôi đã cố gắng triển khai MVVM với WCF RIA và hoàn toàn không ổn định chút nào. Nếu tôi hiểu, MVVM nên chứa tất cả các logic để đơn vị kiểm tra nó trong sự cô lập nhưng khi nói đến kết hợp nó với WCF RIA nó là một câu chuyện khác. Tôi có những câu hỏi sau đây.

  1. Tôi có thể sử dụng siêu dữ liệu được tạo làm mô hình không? Sẽ dễ sử dụng hơn nếu tôi viết tất cả từ đầu.

  2. Khi tôi thấy cách duy nhất tôi có thể nhận dữ liệu là thông qua DomainContext hoặc thông qua ràng buộc trực tiếp trong chế độ xem (nguồn cấp dữ liệu cục bộ). Tôi không muốn sự ràng buộc trực tiếp trong khung cảnh, không thể kiểm tra được. Mặt khác, tôi không thể sử dụng DomainContext, nó không phơi bày bất kỳ thực thể đơn nào !!! Tất cả những gì tôi có là EntitySet mà tôi có thể liên kết với datagrid. Làm thế nào để ràng buộc một thực thể duy nhất vào DataForm từ ViewModel?

  3. Làm cách nào để udpate mô hình vào cơ sở dữ liệu?

  4. Làm cách nào để điều hướng từ một Thực thể đến một tập hợp các mục của nó. Ví dụ nếu tôi có một thực thể công ty tôi muốn hiển thị một DataForm để cập nhật một thông tin thực thể và một datagrid để hiển thị các công ty adresses. Khi lưu một biểu mẫu, tôi muốn lưu một thông tin cho Công ty và một thông tin để địa chỉ về địa chỉ nào được chọn là hoạt động.

Hãy giúp tôi hiểu cách thực hiện tốt. Hoặc có lẽ tôi nên thả WCF RIA và để làm điều đó với WCF từ đầu?

Bạn nghĩ sao?

Trả lời

9

Bạn có thể quan tâm đến điều này session. Nó giải thích cách sử dụng mẫu MVVM với RIA WCF Services.

+0

chắc chắn sẽ khuyên bạn nên xem mã mẫu 'BookClub' từ bài viết này. học được rất nhiều từ nó –

4

Một số câu trả lời ngẫu nhiên ...

Tôi không nghĩ rằng MEF là particuarly rất thích hợp cho Silverlight. Ứng dụng này chủ yếu dành cho các ứng dụng dành cho máy tính để bàn và có thể được điều chỉnh cho các ứng dụng khác, nơi các plugin nằm trong hệ thống tệp cục bộ liên quan đến ứng dụng.

MVVM yêu cầu bạn hiểu vai trò. "View" là XAML của bạn và code-behind. Mã-đằng sau nên xử lý các sự kiện từ điều khiển người dùng, nhưng rất ít hơn thế.

ViewModel giữ dữ liệu mà người dùng kiểm soát sẽ liên kết. Nói chung, ViewModel được ràng buộc với dạng xem như là DataContext của nó, để mọi thứ trong biểu mẫu có thể databind đến các thuộc tính trong ViewModel. ViewModel phải triển khai INotifyPropertyChanged và tăng các sự kiện đã thay đổi thuộc tính cho mỗi thuộc tính mà biểu mẫu databinds tới.

Có thể bạn sẽ muốn tạo ObservableCollection, sử dụng EntitySet làm nguồn của bạn. Điều này sẽ xử lý INotifyCollectionChanged cho các mục đích databinding. Nếu các thực thể trong EntitySet cũng xử lý INotifyPropertyChanged, thì bạn đang ở trạng thái tốt trên databinding cho các bộ sưu tập.

Bạn có thể tạo thuộc tính cho một thực thể riêng lẻ và dữ liệu đó, giả sử rằng thông báo thay đổi cũng được triển khai (cả đối với thành viên tổ chức và thuộc tính thực thể).

Dịch vụ RIA sẽ tạo lại DomainContext trên mỗi bản dựng, giúp duy trì nó đồng bộ. Nó được dự định là một lớp dịch vụ phía trên ORM, do đó, ORM của bạn hoặc bản đồ dữ liệu khác sẽ vẫn phải được duy trì bằng các phương tiện khác.

Tôi chưa xem bản phát hành cuối cùng của Dịch vụ RIA, nhưng tôi không ấn tượng lắm với phiên bản beta. Tôi muốn có các lớp thực thể tốt được xác định trên máy chủ và chia sẻ chúng với dự án Silverlight. Nó không phải dễ dàng để thiết lập, mặc dù, và đòi hỏi một số WCF không tầm thường mà không phụ thuộc vào giới thiệu dịch vụ. (Bản phát hành cuối cùng của RIA Services có thể đã làm sạch một số điều này, nhưng tham chiếu dịch vụ WCF gốc trong Silverlight là khá nhiều điều xấu, chủ yếu là vì nó không tự động tạo lại các lớp đã tạo và mã hóa URI cho dịch vụ phía máy chủ .)

Siêu dữ liệu là một vấn đề khác với bản beta Dịch vụ RIA. Việc gắn các thuộc tính siêu dữ liệu trực tiếp vào lớp DataContract của bạn và các thuộc tính DataMember riêng lẻ dễ dàng hơn, nếu bạn kiểm soát nguồn thực thể. Một lần nữa, điều đó có nghĩa là không sử dụng Dịch vụ RIA. Viết một lớp siêu dữ liệu riêng biệt, như được yêu cầu cho bản beta RIA, không phải là một giải pháp tốt.

Tôi đã không sử dụng Dịch vụ RIA cho Silverlight 3 và không hối tiếc. Đây là một số excellent article on WCF and Silverlight. Mặc dù nó nói Silverlight 2, nó vẫn còn trên mục tiêu cho bất kỳ phát hành Silverlight.

Tôi khuyên bạn nên dùng MVVM Light. Nguồn có sẵn trên Codeplex, nếu đó là một vấn đề. Nó cung cấp hỗ trợ nhắn tin và lệnh, cũng như một ViewModelLocator; trong khi sau này có một chút công việc để hiểu, nó thực sự là một phần mở rộng tốt cho mô hình MVVM cơ bản.

Hope this helps .....

+0

Ngoài ra còn có một mẫu ứng dụng kinh doanh chạy tốt đẹp sử dụng MVVM và WCF RIA. Kiểm tra nó ra ở đây: http://intersoftpt.wordpress.com/2010/06/29/clientui-part-5-the-supercharged-silverlight-navigation/ –

2

Chỉ cần nghĩ rằng tôi sẽ cho bạn biết về một dự án tôi đang làm việc trên - chỉ có phiên bản đầu tiên của chúng tôi thực hiện. Cung cấp một cách đơn giản tuyệt vời để tiếp cận MVVM cho Silverlight + RIA Services đặc biệt. Đơn giản hóa rất nhiều công cụ MVVM và cung cấp một số chức năng giống như bộ điều khiển hơn với lớp Thông báo. http://slmvvms.codeplex.com/

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