MVVM trong WPF đã lỗi thời? [đóng cửa]


18

Hiện tại tôi đang cố gắng để có được MVVM vòng đầu cho WPF - Tôi không có ý định làm tròn ý tưởng của mình, nhưng xung quanh các loại hạt và bu lông thực tế để làm bất cứ điều gì khác xa hơn so với CRUD câm.

Điều tôi nhận thấy là rất nhiều khung công tác và hầu hết / tất cả các bài đăng trên blog đều có từ 'lứa tuổi' trước đây.

Đây có phải là vì bây giờ nó là chiếc mũ cũ và các blogger đã chuyển sang Next Big Thing, hay chỉ vì họ đã nói tất cả những gì cần nói?

Nói cách khác, có điều gì tôi đang thiếu ở đây?


1
Khung MVVM cho WPF đã tiếp tục được cập nhật. Lập trình phản ứng chủ đề mới hấp dẫn [google nó!] Có sẵn dưới dạng MVVM thông qua ReactiveUI . 3 trong số 10 lượt tải xuống nuget hàng đầu là các khung MVVM: Prism.WPF, MvvmCross, Caliburn.Micro. AFAIK, tất cả những thứ này cũng hỗ trợ Xamarin.Forms và UWP, vì vậy sẽ có liên quan trong nhiều năm tới.
ToolmakerSteve

Câu trả lời:


6

MVVM không bị lỗi thời, nhưng nó đã bị chơi quá nhiều để bắt đầu. Tôi không bao giờ thích nó và nó giữ tôi trong WinForms quá lâu; Không thấy rừng cây, tôi ném em bé ra ngoài bằng nước tắm. Bây giờ tôi có WPF và tôi có ý tưởng không muốn trộn mã với đánh dấu, nhưng tôi thích phong cách Android hơn khi dán đánh dấu ở một nơi và hủy bỏ nó với các đoạn mã trong mã của tôi (mà bạn cũng có thể làm trong WPF, thậm chí mặc dù nó không bao giờ có xu hướng để làm như vậy vì lý do gì).

Bằng cách đó, bạn có được quyền kiểm soát chi tiết hơn và không phải lo lắng về tất cả các xử lý "thay đổi" ở mọi nơi. Tôi cảm thấy điều này thực sự dễ kiểm chứng hơn vì các bài kiểm tra sẽ không bắt được nếu bạn bỏ lỡ một sự kiện "đã thay đổi".

Bạn mất một chút tính "khai báo", dường như là xu hướng ngày nay (ví dụ: nếu hai widget được ánh xạ tới cùng một giá trị, trong MVVM, bạn có thể làm điều đó, trong khi với mã bắt buộc bạn phải đặt cả hai) . Nhưng ngay cả với MVVM, điều đó chỉ hoạt động trong trường hợp đe dọa. Nếu một số tiện ích phải hiển thị nhật ký của một tiện ích khác, thì bạn đã phải viết một trình xử lý khác và một sự kiện "đã trao đổi" khác và do đó cuối cùng bạn phải kéo dài định nghĩa "khai báo" để nói rằng nó là như vậy.

Cập nhật 2015

MVF WPF là (r) tiến hóa cho thời gian của nó. Như WPF. Nhưng cả hai đều bị mụn cóc. Plain WPF đã tích hợp quá nhiều vào nó (cộng với nó được xây dựng trên XML) và là một vấn đề khó giải quyết. (Thực sự, nếu WPF chỉ thực hiện một cách tiếp cận "thư viện" hơn là cách tiếp cận "khung", thì nó có thể đã biến thành một thứ thực sự tuyệt vời và toàn bộ vũ trụ công nghệ có thể hoàn toàn khác bây giờ). Các ý tưởng của MVVM là tuyệt vời, nhưng cố gắng để phù hợp với một MVVM vào WPF là hơi hacky từ 1) C # có thể không thực sự thể hiện nó mà không có nhiều soạn sẵn, và 2) WinForms di tích như popup modal vẫn còn tư tưởng phổ biến nhưng không thể dễ dàng được trình bày trong MVVM. Như vậy tất cả đều bị hút.

Điều đó nói rằng, nó vẫn là tùy chọn thực tế duy nhất trên Windows khi bạn cần độ trong suốt hoặc GPU cho các ứng dụng LOB.

React dĩ ​​nhiên đã khiến MVVM trở nên lỗi thời. Tôi đã thất vọng vì VS2015 không có bộ đếm gốc. Còn bây giờ chúng tôi vẫn đang mắc kẹt sử dụng WPF liệu (đó là OK, nhưng cảm thấy cũ (thực sự cảm thấy giống như cũ như winforms bây giờ), và không có một tấn được xây dựng trong chức năng (feels like một số mát mẻ nhưng dự án bị bỏ rơi) hoặc với-MVVM, mà tại thời điểm này cảm thấy không có nhiều chi phí, vì ngay cả MVVM tốt (góc 1) đã bị phơi bày vì những thiếu sót của nó.

Tôi sẽ tránh MVVM của WPF. Đó là một lớp bổ sung, và không ai quan tâm đến nó nữa.


3
Hmm .. Tôi nhận ra đó là một phần của vấn đề tôn giáo, nhưng tôi đã bắt đầu với MVVM trong WPF bằng cách sử dụng Cinch trở lại .. Mmm. 2010? Và tôi thích nó rất nhiều. Kể từ đó, tôi đã chuyển sang Caliburn.Micro và Angular và vẫn yêu thích nó - rõ ràng, có rất nhiều thiếu sót trong MVVM như bạn đã nói (đáng chú ý là không có cách nào để thực hiện các hộp thoại). MVVM có thể cảm thấy khá dài dòng, nhưng khả năng đọc tổng thể và khoảng cách thiết kế / triển khai rõ ràng vẫn làm cho nó đáng giá đối với tôi.
cwap

4
"React dĩ ​​nhiên đã khiến MVVM trở nên lỗi thời" - tuy nhiên hầu hết ngành công nghiệp đều sử dụng Angular.
Den

Tất cả quá nhiều cho đến khi bạn quyết định chuyển ứng dụng máy tính để bàn của mình lên web và tất cả những gì bạn có là một tấn mã - đằng sau tất cả được gắn với các điều khiển WPF.
CAD bloke

1
Vì vậy, không phải React và Angular là một môi trường JavaScript? Điều đó có liên quan gì với WPF? Hay tôi đang thiếu một cái gì đó.
Berin Loritsch

1
@BerinLoritsch - bạn không thiếu thứ gì. Đoạn đó không liên quan đến Hỏi & Đáp này; Dax rõ ràng đã "chuyển" từ WPF sang lập trình web. Táo và cam.
ToolmakerSteve

2

Tất cả đã nói và làm, có một giới hạn cho những gì bạn có thể làm với khung công tác MVVM.

Chúng được "thực hiện" vì WPF đã không được chuyển từ khi Microsoft phát hành nó. Nếu có cập nhật cho công nghệ, các thư viện cũng cần cập nhật. Điều này đã không xảy ra.


Vậy đó là WPF đã 'lỗi thời'? Liên quan đến câu đầu tiên của bạn: là nó mà trong cuộc sống thực UI và mã chỉ là quá hòa quyện vào nhau để làm cho nó một đề xuất thực tế, hoặc có thể một số tinh chỉnh trong WPF đã làm cho nó Chén Thánh (hoặc gần?)
Benjol

3
@Benjol - Có vẻ như Microsoft đã từ bỏ WPF (hoặc ít nhất, không còn cập nhật công nghệ nữa). Quan điểm của tôi về các khung công tác MVVM chỉ là vì mục đích dự định của chúng, có rất ít để tiếp tục và mở rộng chúng trên một nền tảng cũ. Tôi không biết tại sao Microsoft ngừng cập nhật WPF, nhưng tôi nghi ngờ đó là những gì bạn đề xuất - nhiều khả năng Windows 8 và RT đã lấy tài nguyên khỏi WPF.
Oded

18
Đây không phải là sự thật. WPF đã được cập nhật nhiều lần, gần đây nhất là trong .NET 4.5: msdn.microsoft.com/en-us/l Library / bb613588.aspx
17 trên 26 tháng

3
Cũng đáng lưu ý rằng MS hỗ trợ công nghệ nhà phát triển của họ mãi mãi. MFC, phát hành năm 1992, tiếp tục nhận được các bản sửa lỗi với mỗi gói phát hành / dịch vụ của Visual Studio.
17 của ngày 26 tháng

5
Tôi thậm chí còn đi xa hơn khi tuyên bố rằng việc thiếu các bổ sung gần đây cho WPF là một dấu hiệu cho thấy sự trưởng thành của nó. Ngoài ra, như @Oded đã chạm vào, các ứng dụng dành cho máy tính để bàn, trong khi chúng vẫn có giá trị, hiện đang được thay thế bằng các ứng dụng di động. Tuy nhiên, điều đáng nói là phần lớn những gì WPF đã bắt đầu (lập trình UI khai báo, MVVM, DependencyProperives và Data Binding) hiện đang tồn tại trong các công nghệ WinRT và Web (nhiều khung công tác JS). Đây là những giá trị cốt lõi đã nâng cao lĩnh vực một cách đáng kể và tôi tin rằng họ sẽ tiếp tục làm điều đó trong một thời gian dài.
Sebastian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.