2009-05-28 37 views
5

Vì tôi đã học WPF, tôi đã tập trung vào việc chỉ áp dụng mẫu MVVM cho các ứng dụng.Khi nào thì bỏ qua MVVM?

Tuy nhiên, tôi nhận thấy rằng đối với một số chức năng such as validation, rất khó hoặc không thể đúng với mô hình MVVM. Nhiều lần chỉ cần gắn một x: Tên trên một phần tử và thay đổi nó trong mã-đằng sau sự kiện xử lý giải quyết vấn đề ngay lập tức.

Bạn có trải nghiệm thế giới thực nào với từ bỏ mẫu MVVM?

  • khi nào từ bỏ MVVM có ý nghĩa? ví dụ. bạn đã phát triển các quy tắc rằng nếu một ứng dụng có độ phức tạp nhất định, bạn sẽ sử dụng nó, nếu không bạn sẽ không?
  • khi nào nó bỏ MVVM làm tê liệt bạn sau (ví dụ: tôi có thể tưởng tượng nếu bạn muốn nâng cấp ứng dụng của mình để sử dụng Thư viện ứng dụng tổng hợp, toàn bộ khái niệm ViewModels và vùng chứa sẽ không hoạt động nếu bạn có tất cả logic của mình ở mã phía sau
  • khi nào abbandoning MVVM không quan trọng, ví dụ: tôi có thể tưởng tượng mã mà bạn không muốn/cần phải thử nghiệm có thể chỉ ở đoạn mã phía sau trong khi cấu trúc cơ bản vẫn là MVVM và được chạy qua thử nghiệm mô hình, v.v.

Trả lời

4

Tôi chưa gặp phải bất kỳ điều gì không thể làm theo MVVM. Một số điều rất khó, vâng, nhưng một khi giải pháp được tìm thấy, khó khăn đã biến mất. Bất cứ khi nào bạn gặp phải một điều gì đó khó khăn, hãy nhớ hai "khẩu súng lớn" của bạn trong mẫu này: các hành vi và dịch vụ kèm theo. Với hai khái niệm này vững chắc dưới sự kiểm soát của bạn, không có gì mà bạn có thể làm với codebehind mà bạn không thể làm trong một cách thân thiện, sạch hơn, MVVM. Phần khó khăn ở đây chỉ là tìm ra thiết kế tốt nhất, tái sử dụng nhất, ... nhưng đó là sự thật trong bất kỳ mã nào.

Khi nào từ bỏ MVVM có ý nghĩa? Điều đó tùy thuộc vào định nghĩa từ bỏ của bạn, nhưng câu trả lời đơn giản là không bao giờ.Nếu bạn gặp vấn đề cụ thể mà bạn đang gặp khó khăn và không có thời gian để tìm một giải pháp sạch, thì điều thực tế cần làm là từ bỏ mẫu cho một vấn đề đó, không hoàn toàn như ví dụ phức tạp của bạn.

Khi nào nó từ bỏ MVVM làm tê liệt bạn sau này? Khi bạn phải duy trì ứng dụng.

Khi nào giải phóng MVVM không quan trọng? Demo/mẫu chương trình, vứt bỏ/tiện ích đơn giản và muốn.

+0

Tôi cho rằng bạn có nghĩa là Hành vi được đính kèm như trong ví dụ của Josh Smith: http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx. Bạn có ý nghĩa gì bởi "Dịch vụ" liên quan đến MVVM, như trong bài viết này? http://blogs.msdn.com/jaimer/archive/2007/02/19/creating-user-interfaces-declaratively-using-wpf.aspx –

+0

Có hai "hành vi được đính kèm" ngay bây giờ. Cách học cũ, như trong bài viết của Josh, và cách mới, với hành vi Blend. http://azurecoding.net/blogs/brownie/archive/2009/04/06/blend-behaviors-ftw.aspx Cách mới là có thể thực hiện được, nhưng chúng tôi đã sử dụng cách cũ một thời gian. Đối với dịch vụ, tôi đang nói về Service Locator và/hoặc Dependency Injection. Xem Onyx (http://wpfonyx.codeplex.com) (tuyên bố từ chối trách nhiệm: Tôi là tác giả). – wekempf

0

Tôi chưa từ bỏ mẫu MVVM vì tôi chưa bao giờ áp dụng đầy đủ!

Do nền lịch sử, công ty của tôi vẫn sử dụng thư viện gốc C, được đóng gói trong libs được quản lý, được sử dụng trong các chương trình C# và WPF. Bindings không thể được sử dụng, và một số hành vi như INotifyPropertyChanged không thể được thực hiện bởi vì thay đổi được thực hiện trong một số phương pháp C sâu ... Refactoring sâu sắc không phải là một lựa chọn!

Vì vậy, một mặt, tôi hiểu rằng MVVM có thể gây đau đớn để tuân thủ nghiêm ngặt.

Mặt khác, IMHO tôi nghĩ MVVM là một mẫu tốt cho WPF và nên được sử dụng thường xuyên nhất có thể.

5

Tôi nghĩ rằng mã sau sẽ tốt nếu chỉ có liên quan đến chế độ xem. Nó không phá vỡ MVVM vì nó là sự phân tách của các lớp quan trọng. Nếu các máy ảo của bạn không biết về các khung nhìn, thì tôi không nghĩ rằng nó quan trọng nếu bạn sử dụng XAML hoặc mã. Bạn cố gắng để giảm thiểu mã-đằng sau bởi vì nó thường sạch hơn và dễ dàng hơn để làm trong XAML, nhưng đôi khi một vài dòng mã được sạch hơn rất nhiều XAML. Ví dụ, ràng buộc tất cả các phím của bàn phím. Bạn có thể gõ 101 ràng buộc khóa trong XAML hoặc 5 dòng mã.

+1

Thực dụng và phản hồi công bằng. Tuy nhiên, vấn đề với việc sử dụng codebehind đơn giản là nó trở nên quá dễ dàng để đặt mã trong đó mà thực sự không nên. Nếu bạn/nhóm của bạn có kỷ luật để làm điều này đúng, đi cho nó. Tuy nhiên, tôi sẽ không coi đó là cách thực hành tốt nhất. – wekempf

0

MVVM chỉ là một đề xuất. Nếu bạn không thích, bạn không phải sử dụng nó. Rất nhiều lợi thế được yêu cầu của nó vẫn cần bằng chứng. Nhưng bạn luôn có thể mượn một số ý tưởng hay từ nó.

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