MVVM hay MVC? Muốn sử dụng cùng một tập hợp các lớp cho WPF và ASP.NET


10

Tôi là một người mới về các mẫu thiết kế. Tôi mới bắt đầu học MVC khi tôi nghe thấy một tiếng vang mới, MVVM.

Tôi muốn tìm hiểu những hiểu biết của cả hai bằng cách thiết kế lại một kho ứng dụng và hóa đơn cũ mà tôi đã phát triển cho một khách hàng. Tôi muốn viết cả ứng dụng WPF dựa trên Windows và phiên bản dựa trên Web. Tôi muốn sử dụng cùng một tập hợp các lớp nếu có thể, nếu không, thì ít nhất là với ít sửa đổi.

Tôi đã đọc một vài bài báo, nhưng tôi không theo kiến ​​trúc và các khái niệm cấp cao của .NET 3.5 & 4 đã thảo luận ở đó. Tôi muốn di chuyển từng bước bằng cách chỉ thiết kế những gì tôi thực sự cần trong dự án thực tế của mình.

Có bất kỳ tham chiếu từng bước dễ dàng đến MVVM không? MVVM là một siêu tập hợp hay một tập hợp con của MVC? Mẫu nào hiện đại và nên chọn mẫu nào cho các phiên bản Windows & Web của ứng dụng của tôi?

Có một số lớp nhất định mà tôi hiếm khi cần kết nối với Chế độ xem. Trong trường hợp đó, thiết kế cùng một lớp theo cách MVVM sẽ chứng tỏ là một lao động bổ sung.

Câu trả lời:


10

Có bất kỳ tham chiếu từng bước dễ dàng đến MVVM không?

Có, có. Hãy nhìn vào đây.

MVVM là một siêu tập hợp hay một tập hợp con của MVC?

MVVM thuộc họ MVC, vì vậy, nếu bạn có thể nói rằng, đó là một tập hợp con. Đây là một biến thể để tách rời UI khỏi logic nghiệp vụ bên dưới. Tôi muốn mô tả nó như là anh em ruột của MVC. Kể từ những ngày đầu của OOP, mọi người đã tìm cách tách rời UI khỏi logic của họ. MVC là nguyên mẫu đầu tiên phát triển. Nó khá đơn giản, mặc dù hầu hết mọi người không hiểu đúng. Khung nhìn chỉ là một người quan sát mô hình và gọi nó khi cần thiết. Bộ điều khiển chỉ là một chiến lược để khung nhìn giao tiếp với mô hình, ví dụ như khi bạn cần một hành vi có thể trao đổi (ví dụ ReadonlyControll, AdminContoder). MVC rất thành công và thực sự tốt khi áp dụng nó.

MVVM là một loại Mẫu MVP chuyên dụng , như được mô tả bởi Martin Fowler . MVP cố gắng giữ cho chế độ xem càng câm càng tốt (trong khi vẫn lấy đầu vào của người dùng, v.v.), do đó nâng cao khả năng kiểm tra. Nó nhằm mục đích trừu tượng hóa quan điểm và logic tương tác sẽ được đưa vào người trình bày. Người trình bày chỉ giao tiếp với mô hình / logic nghiệp vụ và cập nhật Chế độ xem. Martin Fowler mô tả MVVM khá nhiều trong Mô hình mô hình trình bày của mình.

Khung nhìn hoàn toàn được trừu tượng hóa thành ViewModel. Khi Viewcần một tài sản, ViewModelnhu cầu phải có nó là tốt. Nó (ViewModel) có nghĩa là hoàn toàn độc lập với công nghệ UI cơ bản, một sự trừu tượng hóa. Để giao tiếp giữa View và ViewModel, một mẫu đồng bộ hóa cần được sử dụng (ví dụ: Observer). Điều này không dễ thực hiện trong môi trường web không trạng thái. MVVM khác với MVP, vì Chế độ xem không liên kết với logic mô hình / doanh nghiệp của bạn nữa mà thay vào đó là ViewModel.

Mẫu nào hiện đại và nên chọn mẫu nào cho các phiên bản Windows & Web của ứng dụng của tôi?

Mô hình trình bày (giống như MVVM) trong lý thuyết nên hoàn toàn độc lập với công nghệ UI được sử dụng. Tuy nhiên, khía cạnh đồng bộ hóa cần được đề cập. Nó có thể dễ dàng được thực hiện bằng cách liên kết với Lệnh và Thuộc tính với WPF, nơi đã có keo đồng bộ hóa. Với ASP.NET, đây là một câu chuyện khác. Tuy nhiên, có một bài viết về CodeProject sử dụng Mẫu mô hình trình bày với tất cả các công nghệ UI của Windows. Có một cái nhìn.


4

Do các vấn đề về vòng đời và nhu cầu giữ trạng thái giữa các bài đăng trên trang, bạn sẽ rất khó sử dụng lại 100% mã UI không có của mình giữa web và WPF. Asp.net không có ràng buộc dữ liệu mạnh mẽ cần thiết cho MVVM, cũng có rất nhiều logic cần phải chạy trong jscript ngày nay vì mọi người mong đợi UI tự cập nhật mà không cần phải đăng lại.

Nếu bạn có thể sử dụng SilverLight, cuộc sống của bạn sẽ ít phức tạp hơn nhiều :-)

Tương tự như vậy, bạn có thể lưu trữ một trình duyệt web trong ứng dụng WPF của mình cho các bit phổ biến của UI không?


Tôi có thể nhận được những lợi ích gì với SilverLight?
RPK

1
@PRK, Silverlight chủ yếu sẽ cho phép bạn làm mọi thứ WPF làm và nếu bạn có thể khiến tất cả người dùng "web" của mình cài đặt nó, cũng sẽ cho phép tạo một giải pháp truy cập var web và "cảm nhận" như một ứng dụng web.
Ian

4

Ý định của bạn để sử dụng các lớp tương tự cho giao diện người dùng dựa trên ASP.Net và WPF là không thực tế. Cơ sở dữ liệu và việc sử dụng javascript trên web rất khác với WPF. Tùy chọn duy nhất tôi có thể nghĩ đến là MVP với chế độ xem hoàn toàn thụ động . Về lý thuyết, bạn có thể có cùng một người thuyết trình cư trú trên trang Web và WPF.
Trong thực tế, tôi sẽ phát triển một kiến ​​trúc trong đó hầu hết các quy tắc kinh doanh nằm trong một lớp dịch vụ web và hai tầng trình bày khác nhau với càng ít quy tắc kinh doanh càng tốt để nói chuyện với dịch vụ web này.

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.