Mẫu nào sẽ được sử dụng với Mẫu Web điển hình?


9

Tôi đang viết một ứng dụng ASP.NET Web Forms đơn giản. Tôi muốn cải thiện mã bằng cách triển khai bất kỳ mẫu thiết kế nào đạt được sự trừu tượng hóa và tăng khả năng quản lý và dễ hiểu.

Mô hình nào được khuyến nghị? Vui lòng cung cấp các liên kết đến các ứng dụng mẫu.


nó là một ứng dụng cấp doanh nghiệp?
Yusubov

Câu trả lời:


7

Bạn có thể cân nhắc sử dụng mẫu MVVM Model-View-View Model . Nó là một dẫn xuất của MVC, nhưng được thiết kế / dự định sẽ được sử dụng trong chính xác tình huống mà bạn mô tả. Có rất nhiều thông tin trên trang web MSDN nếu bạn cảm thấy không thích nó.

MVVM tạo điều kiện phân tách rõ ràng sự phát triển của giao diện người dùng đồ họa (như ngôn ngữ đánh dấu hoặc mã GUI) khỏi sự phát triển của logic nghiệp vụ hoặc logic back end được gọi là mô hình (còn được gọi là mô hình dữ liệu để phân biệt với chế độ xem mô hình). Mô hình khung nhìn của MVVM là một trình chuyển đổi giá trị có nghĩa là mô hình khung nhìn chịu trách nhiệm phơi bày các đối tượng dữ liệu khỏi mô hình theo cách mà các đối tượng đó dễ dàng được quản lý và tiêu thụ. Về mặt này, mô hình khung nhìn là mô hình nhiều hơn khung nhìn và xử lý hầu hết nếu không phải tất cả logic hiển thị của khung nhìn (mặc dù ranh giới giữa các chức năng được xử lý bởi lớp nào là chủ đề thảo luận và thăm dò đang diễn ra).


Tôi đọc về ASP.NET Model View Presenter framework tại codeplex. MVVM có sẵn cho các Biểu mẫu Web thông qua bất kỳ triển khai nào không?
RPK

MVP và MVVM về cơ bản là giống nhau. Bài viết Wikipedia cũng giải thích điều này: MVP là công cụ phái sinh đầu tiên trong chuỗi này từ MVC. Martin Fowler có công trong việc xuất bản mô hình và nó liên quan đến một số thách thức mà Người điều khiển có thể gặp phải trong một lĩnh vực điều khiển sự kiện. MVVM là một sàng lọc từ đó để tận dụng sự ràng buộc dữ liệu giữa khung nhìn và mô hình khung nhìn.

Hầu hết các ứng dụng tôi thấy chỉ sử dụng Mẫu lưu trữ. Lý do là gì?
RPK

1
Mẫu kho lưu trữ nhanh hơn một chút để thực hiện và không nặng như MVP / MVVM. Chế độ xem đánh trực tiếp vào mô hình thay vì có lớp trung gian. So với MVP / MVVM, nó sẽ được thực hiện nhanh hơn với ít mã hơn để viết. OTOH, nó sẽ dễ vỡ hơn vì nó được liên kết chặt chẽ với lớp truy cập mô hình / dữ liệu. Mẫu lưu trữ có thể sẽ hoạt động cho các trường hợp bạn mô tả, nhưng nếu dự án của bạn phát triển, bạn sẽ muốn bạn có lớp Trình bày / VM trung gian.


9

Câu trả lời ngắn : nhìn vào mẫu MVP để tránh các vấn đề tiềm ẩn về mã ASP.NET tạo ra các vấn đề bằng cách ghép lỏng lẻo (khử khớp) quan điểm và logic của bạn.

Bạn cũng có thể muốn tiến thêm một bước và xem xét sự so sánh này: MVC, MVP, ASP.NET .

Các bài viết sau đây là điểm nhập cảnh tốt và ví dụ:


6

Một điều bạn cần tránh bằng mọi giá là mô hình chống WebForms đưa logic vào phía sau mã của bạn. Cho dù bạn có sử dụng MVP hay hương vị của điều đó hay không, các tệp phía sau mã của bạn sẽ rất thưa thớt vì sự tỉnh táo của bạn.


1
Hiện tại mã phía sau của tôi là cặp đôi chặt chẽ với logic. Và đây là sai lầm lớn nhất mà các nhà phát triển Web Form thường làm.
RPK

0

Tuy nhiên ... yêu cầu đã nêu của bạn rất trừu tượng:

Tôi muốn cải thiện mã bằng cách triển khai bất kỳ mẫu thiết kế nào đạt được sự trừu tượng hóa và tăng khả năng quản lý và dễ hiểu. ...

... Và đến cuối cùng, bạn dường như đang tìm kiếm "các mẫu thiết kế" như là một loại công thức. Bạn thậm chí còn trích dẫn "trừu tượng" như một yêu cầu.

Mã đã tồn tại được tìm thấy trong một ứng dụng đã tồn tại thường không được hưởng lợi từ các nỗ lực "cải thiện" nó. Bạn cần hoàn toàn chứng minh những nỗ lực của mình - không phải là trừu tượng như "các mẫu thiết kế" - mà là trong chính ứng dụng, chính xác như hiện tại.

Trong nhiều thập kỷ, tôi đã xem xét hơn năm mươi ứng dụng khác nhau đang hoặc vẫn đang phục vụ và tôi có thể thấy "những viên đạn bạc" của năm qua khi họ đến và đi, mỗi người áp dụng một cách làm "mới". không bao giờ thực sự thay thế bất cứ điều gì. Cả hai phương pháp vẫn còn đó. "Khả năng quản lý và dễ hiểu" về lâu dài sẽ được cải thiện rất nhiều nếu "viên đạn bạc" này chưa bao giờ được thử.

Toàn bộ khái niệm "mẫu thiết kế", theo quan điểm của tôi, là chúng là một cách để đốt cháy cuộc trò chuyện hữu ích và đề xuất các phương án khả thi. Nhưng họ không phải là công thức nấu ăn.


-1

MVVM có thể có. NET 4.5 với liên kết mô hình và sử dụng các điều khiển ràng buộc templated như FormView.

Đây là kỹ thuật tôi sử dụng:

Tôi thiết kế ViewModels cho mỗi UserControl và UserControl lồng nhau và sau đó sử dụng FormView luôn trong EditMode, trong đó tôi bao gồm các điều khiển liên kết với các thuộc tính mô hình bằng biểu thức Binding.

Tôi đặt SelectMethod và UpdateMethod của FormView. Cái đầu tiên trả về ViewModel và lần thứ 2 gọi TryUpdate () trên đó. Khi gửi lại, tôi luôn gọi phương thức Cập nhật của FormView trong Tải trước hoặc Tải. Theo cách đó, ViewModel luôn được cập nhật từ chế độ xem.

Tôi chạy logic bên trong ViewModel và trên PreRender, tôi khởi động lại chế độ xem để áp dụng bất kỳ thay đổi nào. Chìa khóa trong phương pháp này là đưa ViewModel vào chế độ xem (UserControl) bên ngoài chế độ xem (ví dụ ở cấp Trang) và tất nhiên đảm bảo rằng có thể tuần tự hóa và được lưu trong bộ nhớ cache trong ViewState hoặc bất kỳ nơi nào khác tôi chọn.

Cuối cùng, tôi vô hiệu hóa ViewState trong tất cả các điều khiển vì chúng bị "điều khiển" tối đa bởi ViewModel được lưu trong bộ nhớ cache và không cần trạng thái riêng.

Kỹ thuật này chưa bao giờ làm tôi thất bại cho đến nay và tôi chỉ ước mình có thể tìm ra giải pháp cho ràng buộc lệnh / nút, như WPF.


1
Vui lòng đọc từ điển bách khoa.wikia.com/wiki/Wall_of_Textchỉnh sửa câu trả lời của bạn.
Jan Doggen
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.