2009-08-11 27 views
9

Tôi đang làm việc trên ứng dụng WPF MVVM. Điều mà tôi nhận thấy là tôi phải viết một số lượng mã lệnh soạn sẵn chỉ để khai báo các lệnh (thông qua DelegateCommands từ Bộ công cụ MVVM của Nhóm WPF), các thuộc tính đính kèm và các hành vi kèm theo. Có bất kỳ chiến lược nào có sẵn để giảm số lượng mã soạn sẵn mà tôi phải viết không?Giảm mã bản mẫu trong ứng dụng MVVM WPF cho thuộc tính đính kèm, lệnh, v.v ...?

Cảm ơn!

+1

Hãy cho chúng tôi một ví dụ về thứ bạn xem là "bản mẫu". Bản mẫu của một người là logic kinh doanh của một người đàn ông khác. –

+0

Tôi sử dụng các đoạn mã để tạo chúng. Các đoạn mã tạo ra #regions vì vậy tôi không phải xem xét tất cả. –

Trả lời

9

Cá nhân, tôi thích số MVVM Foundation library của Josh Smith. Anh ấy sử dụng một lớp có tên là RelayCommand ở đó, nhưng âm thanh này khá giống với lớp học DelegateCommand của bạn từ bộ công cụ. Nó cho phép bạn tạo một lệnh và vượt qua logic CanExecuteThực hiện thông qua các biểu thức lambda. Điều đó sẽ giúp giảm rất nhiều mã soạn sẵn.

Trong his blog, Josh cũng nói về việc sử dụng một người quan sát thuộc tính chung để tránh một số khía cạnh lộn xộn của việc xử lý sự kiện PropertyChanged. Đó là giá trị xem xét, là tốt.

Thành thật mà nói, rất nhiều cái gọi là "boilerplate" mã được thiết lập một nền tảng rất năng động và linh hoạt cho ứng dụng của bạn. Nếu bạn đang tạo một ứng dụng nhỏ, dễ bảo trì, bạn có thể tự hỏi mình, "tôi có cần áp dụng mẫu MVVM ở đây không?" Nếu, mặt khác, bạn đang tạo ra một ứng dụng lớn hơn sẽ có thời gian hoạt động lâu dài và đòi hỏi nhiều bảo trì, sau đó mã soạn sẵn này sẽ giúp bạn tiết kiệm dòng.

+2

Liên kết tới bài viết trên blog: https://joshsmithonwpf.wordpress.com/2009/07/11/one-way-to-avoid-messy-propertychanged-event-handling/ –

1

Chiến lược rõ ràng nhất tôi có thể nghĩ đến là sử dụng đoạn mã và/hoặc mẫu tệp. Nó không làm giảm các dòng mã nhưng ít nhất nó làm cho bạn tiết kiệm thời gian.

Bạn có thể tự tạo cho mình (hoặc tìm một số bạn có thể nhập trực tiếp vào phòng thu trực quan của bạn).

Cá nhân tôi sử dụng bộ công cụ ánh sáng mvvm từ Laurent Bugnion và tôi sử dụng các đoạn mã/tệp mẫu của mình, chúng giúp tôi tiết kiệm rất nhiều thời gian. Tôi sẽ giả sử có một cái gì đó tương tự cho hầu hết các bộ công cụ mvvm phổ biến.

Hy vọng điều đó sẽ hữu ích!

1

Tôi thấy rằng tôi đã viết rất nhiều mã để triển khai thông báo thay đổi qua giao diện INotifyPropertyChanged. Để giảm bớt điều này, tôi đã tìm thấy một gói NuGet có tên PropertyChanged.Fody mà làm cho việc thêm INotifyPropertyChanged vào một thuộc tính lớp thực sự đơn giản.

Dưới đây là cách sử dụng;

using PropertyChanged; 

[ImplementPropertyChanged] 
public partial class Order 
{ 
} 

Bây giờ mọi thuộc tính công khai trong lớp sẽ có thông báo thay đổi thuộc tính. Điều này đặc biệt hữu ích cho các lớp EF được tạo ra thông qua DB trước tiên, nơi bạn không có toàn quyền kiểm soát đối tượng của bạn.

Xem GitHub để biết thêm thông tin.

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