2012-01-14 33 views
9

Chúng tôi muốn bắt đầu phát triển phần mềm máy tính để bàn trung gian. Chúng tôi quyết định sử dụng WPF. Chúng tôi không muốn sử dụng mẫu MVVM. Bởi vì chúng tôi không quen thuộc với MVVM, và cũng có giới hạn thời gian. Có đúng để phát triển ứng dụng WPF không có mẫu MVVM (sử dụng kiến ​​trúc 3 lớp nhưng không có MVVM) Mặc dù nó có hiệu suất tốt hơn các mẫu giành chiến thắng chưa?Phát triển phần mềm WPF không có MVVM

+1

Các ứng dụng WPF * là các ứng dụng * cửa sổ, nếu bạn muốn * giành các biểu mẫu * bạn nên viết ... –

+1

Không, WPF vẫn còn chậm hơn so với WinForms. Mẫu thiết kế không liên quan đến điều này. –

+5

mà không có một số MVVM giúp XAML của bạn sẽ trở thành một mớ hỗn độn rất nhanh ... –

Trả lời

13

Bạn không cần phải dựa vào MVVM khi sử dụng wpf. Thực sự là chìa khóa để sử dụng WPF đúng là: lệnh

  • sử dụng thay vì các sự kiện (bạn có thể làm điều này mà không nhận ra nó, nhưng hãy kiểm tra để chắc chắn)
  • Sử dụng ràng buộc thay vì nhận được giá trị ra khỏi kiểm soát trực tiếp
  • dữ liệu
  • Đặt bối cảnh dữ liệu và liên kết với điều đó thay vì liên kết với mã đằng sau

MVVM hoạt động thực sự tốt cho hai việc này nhưng không bắt buộc. Cụ thể, MVVM đòi hỏi phải tách riêng 3 cấp mối quan tâm có thể dễ dàng thực hiện với MVP.

Theo như hiệu suất có liên quan, điều đó thực sự phụ thuộc vào nền tảng mà ứng dụng đang chạy và kiểu mã hóa. Nếu bạn chạy nó trên một máy tính mà không có một card đồ họa phong nha thì winForms có thể sẽ hoạt động tốt hơn bởi vì wpf có thể sẽ trở lại với việc render phần mềm sẽ rất chậm. Nếu bạn cần làm đồ họa 3d thì wpf thực sự là lựa chọn duy nhất của bạn.

Someone else's recommendation to NOT use MVVM.

A codeproject example of how to do MVP with wpf

+0

Thực ra nó giống như: sử dụng [lệnh] (http://msdn.microsoft.com/en-us/library/ms752308.aspx) thay vì xử lý sự kiện và ràng buộc dữ liệu thay vì cập nhật bắt buộc. –

+0

@ H.B. Lệnh là tốt, nhưng chúng quá mức cho hầu hết những gì tôi làm. Thêm dữ liệu ràng buộc thay thế một số xử lý sự kiện buổi tối nếu bạn làm tất cả mọi thứ mà không phải là ràng buộc dữ liệu thông qua lệnh. – mydogisbox

+0

@ H.B. Hmmm, tôi lấy lại. Tôi sử dụng ràng buộc VỚI các lệnh được định tuyến. Không chắc chắn tại sao bạn tương phản ràng buộc và lệnh. – mydogisbox

2

Bạn chắc chắn không phải dựa vào MVVM khi sử dụng WPF/Silverlight.

Đối với sự khác biệt về hiệu suất - nó có thể phụ thuộc vào kiểu mã của bạn, tuy nhiên nếu được thực hiện đúng cách, sự khác biệt sẽ không đáng chú ý.

+1

Đồng ý, tuân thủ các mẫu MVVM không tự động dẫn đến một kiến ​​trúc ứng dụng tốt (mặc dù nó giúp), cũng không sử dụng nó ngăn cản bạn tạo ra các ứng dụng tốt đẹp. Tuy nhiên, có một vài khái niệm cốt lõi trong WPF mà bạn nên làm quen với trước khi bạn bắt đầu viết mã, đặc biệt là ràng buộc dữ liệu. Nhận giới thiệu tổng hợp trong [MSDN] (http://msdn.microsoft.com/en-us/library/aa970268.aspx). – Clemens

-3

Không yêu cầu sử dụng MVVM. Người ta có thể sử dụng trình thiết kế trực quan để kéo các điều khiển thả n 'lên bề mặt thiết kế. Nhấp đúp vào nút và nhận trình xử lý sự kiện trong mã sau. Đừng quên các thuộc tính thiết lập & trình xử lý sự kiện thông qua PropertyGrid. Tất cả chính xác như được thực hiện trong Winforms.

Nếu không có ràng buộc dữ liệu DataContext không hoạt động. Nếu bạn muốn sử dụng databinding, các ví dụ đầu tiên tôi đã nhìn thấy thiết lập của DataContext của Window = này; trong hàm tạo. Trong trường hợp này, các cửa sổ đóng vai trò là 'ViewModel' của riêng nó.

Bạn cũng có thể sử dụng MVVM với Chế độ xem đầu tiên. Không cần DI hoặc IoC.

public class MyViewModel 
{ 
} 
public class MyWindow 
{ 
    public MyWindow() 
    { 
     DataContext = new MyViewModel(); 
    } 
} 

Tất nhiên bước tiếp theo là triển khai DI/IoC bằng Unity.

+0

Bạn CÓ THỂ sử dụng ràng buộc dữ liệu mà không cần thiết lập thuộc tính 'DataContext', bạn chỉ cần xác định nguồn tương đối (ví dụ: đặt tên cửa sổ và tham chiếu cửa sổ theo tên). Ngoài ra, nếu bạn chỉ cần sử dụng trình xử lý sự kiện như trong winforms, thì chỉ cần sử dụng winforms. Cuối cùng, nếu bạn không có tất cả các M - V - VM tách ra sau đó bạn không có MVVM, bạn có cái gì khác. – mydogisbox

2

Bạn có thể phát triển bất kỳ ứng dụng nào bằng WinForm và WPF mà không có bất kỳ Mẫu thiết kế hoặc Mẫu ứng dụng nào.

0

MVVM là không bắt buộc nhưng nó giải quyết một số vấn đề thường gặp với logic trình bày. Ví dụ, hãy xem xét thuộc tính IsMusy ViewModel.Nó được thiết lập từ bất kỳ hoạt động nào có thời lượng và có thể được sử dụng từ Command.CanExecute để báo hiệu các điều khiển bị ràng buộc để vô hiệu hóa chính nó khi một cái gì đó đang chạy. Một thuộc tính cho cả thao tác logic và giao diện người dùng. Bạn có thể nghĩ nhiều ví dụ như thế này sẽ hướng dẫn bạn hướng tới MVVM. Đó là những gì các ràng buộc đưa ra rằng vấn đề, không phải là mô hình nó tự.

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