2010-01-10 31 views
12

Gần đây tôi đã tham gia một dự án phát triển mới xây dựng một ứng dụng khách dày bằng cách sử dụng WPF và MVVM. Tôi đã phát triển các ứng dụng trong các khung công tác .NET khác nhau từ 1.1 đến 3.5 và tất cả các công nghệ chính; WebForms, MVC và WinForms. Trên tất cả các dự án của tôi, tôi đã tận hưởng từng giây phút của nó, nhưng trong dự án này, tôi cảm thấy rằng tôi đang vật lộn và như vậy không thích nó nhiều. Khi .NET 3.5 ra mắt vào năm 2008, tôi thực sự thích học các tính năng ngôn ngữ mới (LINQ, MVC, Lambda Expressions, vv) và dabbled trong WPF vì vậy xin vui lòng không giả sử tôi chống lại học một cái gì đó mới.Học WPF và MVVM

Nhưng đường cong học tập về dự án này có vẻ thực sự dốc và tôi cảm thấy rằng việc học MVVM trên WPF + ứng dụng là một chút khó khăn. Mặc dù tôi chỉ tham gia dự án trong một thời gian ngắn (2 tuần) Tôi thực sự thích WPF nhưng đã không thích mô hình MVVM. Việc không thích mẫu MVVM của tôi có thể bởi vì tôi không thực sự hiểu nó và tôi cảm thấy rằng tôi phải viết rất nhiều mã "không thực hành tốt nhất" để làm những gì tương đối đơn giản trong những ngày WinForms của tôi.

Vì vậy, câu hỏi của tôi là có ai khác phải đối mặt với tình huống tương tự và bạn đã gắn bó với MVVM hay đi theo một hướng kiến ​​trúc khác?

Trả lời

9

Tôi đã làm việc với WPF từ các phiên bản beta và tôi sẽ không bao giờ quay trở lại winforms. Với tôi MVVM là một triết lý và phải mất rất nhiều công sức và kỷ luật để thực hiện nó một cách trung thực. Nó khuyến khích tách hoàn toàn giữa giao diện người dùng và logic tương tác có nghĩa là không có mã nào đằng sau bất kỳ điều gì có nghĩa là logic tương tác có thể kiểm tra mà rất khó làm với winforms.

Ngược lại với gius, tôi khuyên bạn nên gắn bó với WPF và MVVM đơn giản, đặc biệt nếu bạn mới bắt đầu với WPF. Có rất nhiều điều để nắm bắt với MVVM và WPF, thêm vào đó sẽ chỉ làm chậm tiến trình của bạn. Nhưng đó chỉ là ý kiến ​​của tôi.Tôi luôn thích lớp học của tôi hơn là cố gắng tìm hiểu mọi thứ cùng một lúc theo cách bạn kiểm soát và bạn có thêm kiến ​​thức về cách ứng dụng của bạn hoạt động.

Nếu bạn chưa thực hiện vì vậy tôi đề nghị bạn đọc bài viết MS trên MVVM:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

tuyệt vời của nó và nó là đọc bắt buộc đối với các thành viên đội của tôi, những người viết bất kỳ mã WPF.

Tôi không chắc chắn bạn và nhóm của bạn làm việc như thế nào nhưng bạn cần tự hỏi liệu MVVM có phù hợp với bạn hay không. Nếu đơn vị kiểm tra/thử nghiệm điều khiển và decoupled UI là một cái gì đó bạn đã làm hoặc là quan trọng với bạn thì MVVM chắc chắn là một con đường tốt để có. Nếu nhóm của bạn hài lòng với việc viết mã phía sau và bạn không thấy lý do tại sao bạn nên làm phiền tách thì đừng bận tâm với MVVM vì bạn sẽ thấy rằng nó sẽ làm chậm bạn xuống. Cá nhân sau này không bao giờ là một lựa chọn cho tôi.

Vui lòng liên hệ với tôi nếu bạn có bất kỳ câu hỏi cụ thể nào về WPF hoặc MVVM.

+0

Cảm ơn câu trả lời của bạn, liên kết MSDN rất tuyệt vời. – Kane

+0

Trong kinh nghiệm của tôi, phải mất rất nhiều công việc xung quanh, hack và code-bloat để thực hiện MVVM trung thành. Tôi ước rằng đó không phải là trường hợp nhưng đó là nơi chúng tôi hiện đang đứng. – Damien

1

Tôi bắt đầu học WPF và nhanh chóng bắt gặp MVVM - dường như nó phù hợp với tôi. Có lẽ đáng để chỉ ra rằng dường như có một số khác biệt trong cách mọi người triển khai MVVM, một trong những cách quan trọng nhất là View-first hoặc ViewModel-first. Một số dường như coi đây là một điểm phúc âm - Tôi không có đủ kinh nghiệm để quyết định xem nó có phải như thế không. Tôi có xu hướng xem-đầu tiên (vì vậy View có một tham chiếu đến ViewModel và ViewModel có một tham chiếu đến Model và không theo hướng khác) nhưng tôi đã đi qua một kịch bản mà cách khác dễ dàng hơn.

Tại sao không đăng một số câu hỏi xung quanh các điểm cụ thể mà bạn thấy là không thực hành tốt nhất. Nó cũng có thể giúp người khác vật lộn với chủ đề này.

Một câu hỏi khác: bạn có đang sử dụng một khung công tác cụ thể cho MVVM không?

1

Vâng, trước khi sử dụng MVVM, tôi đã sử dụng MVC trong khung ASP.NET MVC. Kiến trúc Model-view-controller khá rõ ràng ở đó nên nó đã giúp tôi thay đổi thái độ của mình từ chuẩn ASP.NET và WinForms.

MVVM hơi khó hiểu hơn, nhưng một khi bạn nhận ra rằng WPF khác với web (bạn là người dùng phản hồi lại chế độ xem, không phải với bộ điều khiển), bạn nên chuyển từ MVC sang MVVM . Tôi khuyên bạn nên đọc các bài viết về MVVM trên trang chủ của Caliburn project (cột bên trái, phần 3. Nghiên cứu MVVM) - điều này đã giúp tôi rất nhiều.

Về ứng dụng WPF (Silverlight), tôi khuyên bạn nên bắt đầu xây dựng ứng dụng ngay trên đầu PRISM (Composite WPF) và/hoặc Caliburn - mặc dù nó có thể gây nhầm lẫn ngay từ đầu, vẫn là lựa chọn tốt hơn nhiều so với vanilla WPF (nói về các thực hành mà chúng buộc bạn phải sử dụng). Nhưng hãy chắc chắn rằng một khi bạn đã hoàn thành ứng dụng WPF đầu tiên của bạn, bạn sẽ muốn viết lại nó từ đầu. Nhưng đó là cách nó hoạt động khi bạn học một công nghệ mới.

1

MVVM chỉ là một mẫu thiết kế . Bạn không cần nó trừ khi bạn cảm thấy thoải mái với WPF. Nếu bạn đang học WPF, tôi đề nghị bạn đầu tiên hoàn thành cuốn sách, sau đó tìm hiểu về MVVM. Nếu bạn cố gắng học cả hai, bạn sẽ cố gắng thực hiện MVVM trong mọi ứng dụng WPF đơn giản hoặc không hiểu một số tính năng của WPF mà MVVM sử dụng.

P.S: Tôi đã đi đến kết luận này khi tôi đối mặt với vấn đề bản thân mình. Tôi vẫn không hiểu cách ViewModel có thể tạo ra một View mới nếu nó không biết gì về nó.

+0

Chỉ để cho chế độ xem thực hiện với các lệnh. –

2

tôi đã phải đối mặt với một tình huống tương tự, và con đường tôi quyết định đi là:

  • Sử dụng ViewModels cho quan điểm của tôi, nhưng tránh được một số thuần khiết MVVM, như Hành vi đính kèm (mà tôi tìm câm và thô)
  • Sử dụng Magellan MVC framework, phù hợp nhất với mô hình tinh thần của tôi về cách ứng dụng nên hoạt động.
0

WPF có đường cong học tập dốc. MVVM cũng vậy. Điều này giải thích cảm xúc của bạn: nắm bắt được cả XAML và MVVM cố gắng tạo ra một ứng dụng trong thế giới thực cùng một lúc là một nhiệm vụ khó khăn.

Tôi đã đào tạo các nhà phát triển .NET giống như bạn và giúp họ vượt qua đường cong học tập đó một cách nhanh chóng. Sau đó đóng gói đào tạo thành một cuốn sách nhanh chóng đọc mà bạn có thể nhận được ở đây:

Nó cũng có sẵn trên Amazon và các trang web sổ lớn.

Xin lỗi nếu điều đó có vẻ như tự quảng cáo, nhưng tôi thực sự tin rằng sách này phù hợp 100% cho tiểu sử của bạn.