Cách sử dụng cơ bản của MVVM-Light
- Intialize các DispatcherHelper chức năng Application_Startup file của App.cs
- Tạo ViewModels từ BaseClass
- Luôn Tạo một lớp ViewModelLocator, trong đó có tất cả các mô hình điểm của bạn và được Liên kết trong tài nguyên ứng dụng của bạn
- Sử dụng RelayCommands để hiển thị Chức năng cho chế độ xem của bạn
- Tìm hiểu khi nào sử dụng DispatchHelper.
sạch-Up Ý tưởng:
- Khi thích hợp, thêm vào ViewModel của bạn để xóa EntitySet của DomainContext của bạn trên Cleanup()?
- Gọi chức năng CleanModatorVM() của ViewModelLocator để xóa các chế độ xem khi chúng không còn cần thiết trong ứng dụng nữa.
Tôi rất muốn nghe ý kiến của người khác về thời điểm/cách bạn sử dụng chức năng CleanUp. Khi ứng dụng của tôi phát triển, tôi cảm thấy cần phải thêm một số chức năng dọn dẹp để quản lý tốt hơn việc sử dụng bộ nhớ máy khách.
Đối Blendability:
- Tóm tắt các Triển khai dịch vụ/Query đến một giao diện.
- Tạo 2 lớp cho từng Lớp thực hiện dịch vụ (1 cho thiết kế, 1 cho sản xuất)
- Trong mỗi ViewModel của bạn, triển khai Lớp dịch vụ riêng của mình (sử dụng IsInDesignMode) để tạo các dịch vụ có thể kết hợp khi cần thiết.
- Sử dụng biến tĩnh để giữ DomainContext của bạn trong Lớp dịch vụ hiển thị.
- Thêm DispatcherHelper.Initialize() vào hàm dựng của ViewModels, nhưng chỉ khi ở Chế độ thiết kế. Blend không tải ứng dụng khi tải một trang, và điều này làm việc xung quanh đó.
Đối Added Business Logic:
- Thêm Logic kinh doanh trong mô hình đầu tiên, sau đó trong ViewModel.
- Sử dụng các phương pháp từng phần của Mô hình để thêm logic cho các sự kiện thay đổi/cập nhật phù hợp.
- Thêm thuộc tính Chỉ đọc (chỉ getter) để cung cấp các giá trị tóm tắt và được tính toán trên mô hình của bạn.
Đối Views:
- Luôn Bind gốc để đối tượng Locator.
- Cố gắng giữ logic theo mã để bố cục hoặc logic UI tùy chỉnh. Tránh tham chiếu ViewModel của bạn.
Đối với Bộ sưu tập:
- Sử dụng CollectionViewSource cho các bộ sưu tập trong ViewModels của bạn, với một nguồn của DomainContext EntitySet
- Áp dụng tất cả lọc, phân loại, và Nhóm logic đến CollectionViewSource trong ViewModel của bạn.
- Sau ServiceCalls, Gọi .View.Refresh() trên Bộ sưu tập của bạnXem đối tượng nguồn khi cần thiết để cập nhật giao diện người dùng.
Đối với ViewModel phối hợp (điều khiển logic)
- Sử dụng tin nhắn một cách tiết kiệm, quá nhiều phức tạp có thể khó khăn để quản lý.
- Sử dụng các lớp NotificationMessage và PropertyChangedMessage để gửi/nhận với.
Đối với RIA DomainServices:
- Thực hiện bất kỳ khai thác gỗ trong giữ lại thay đổi chức năng, không phải là cập nhật/chèn/xóa logic.
- Trong các hàm Chèn, Cập nhật, Xóa, nếu bạn cần tham chiếu một Thực thể khác thông qua Điều hướng Thuộc tính, hãy kiểm tra EntityStatus trước hoặc tải thực thể từ Ngữ cảnh khác để ngăn xung đột EntityStatus.
Đối Debugging/Kiểm tra:
- Kiểm tra các cửa sổ Output cho lỗi Binding và sửa chữa chúng. Lỗi ràng buộc không thành công với người dùng, nhưng làm giảm hiệu suất ứng dụng và hành vi mong đợi.
- Tạo đơn vị xét nghiệm trong Silverlight để xác minh bất kỳ bổ sung mẫu/Logic kinh doanh
- Tạo dự án Unit Test để kiểm tra logic server-side và chức năng
Đối với Entity Framework:
- Giữ 1- to-1 Kết hợp các đối tượngContext với dịch vụ miền. Cố gắng phân chia theo cách khác sẽ gây ra vấn đề.
- KHÔNG sử dụng thuộc tính [Thành phần] trừ khi bạn có ý định dành nhiều thời gian để xây dựng logic Chèn, Cập nhật và Xóa một cách cẩn thận.
- Sử dụng dịch vụ riêng để phân phát các loại tùy chỉnh cho Khách hàng RIA của bạn. Không thêm chúng vào DomainService của bạn cho đối tượng EntityFramework của bạn
- Thực hiện logic cập nhật/tích hợp phía máy chủ (chẳng hạn như cập nhật hệ thống khác) trong hàm PersistChangeSet, không có trong các hàm Chèn, Cập nhật, Xóa.Điều này sẽ ngăn bạn vô tình kéo vào một thực thể thông qua Điều hướng Thuộc tính, điều này sẽ khiến phiên bản tách rời của bạn không được cập nhật.
- Tạo một Ngữ cảnh bổ sung để tìm các giá trị hiện tại trong quá trình cập nhật/tích hợp logic.
Nguồn
2010-08-05 16:22:35
Cân nhắc chuyển đổi thành wiki cộng đồng để mọi người có thể chỉnh sửa. –
Tôi không nghĩ đó là com-wiki. Người hỏi xứng đáng với danh tiếng cho câu hỏi hay này. – Shimmy