Cấp bậc tác giả:

TRAINING

So sánh WebForms với MVC

Được viết bởi QuangIT ngày 22/02/2013 lúc 01:50 PM
Một thời gian dài tôi đã được làm việc với ASP.NET và tôi thích viết các ứng dụng web. Năm 2008, Microsoft đã đưa ra ASP.NET MVC và tôi đã khá ngạc nhiên về thực tế là "Tại sao cần nhiều hơn công nghệ ASP.NET " và nhiều người vẫn còn đang cân nhắc.
  • 0
  • 6294
Tải tệp tin: Click ở đây

So sánh WebForms với MVC


Giới thiệu
Một thời gian dài tôi đã được làm việc với ASP.NET và tôi thích viết các ứng dụng web.
Năm 2008, Microsoft đã đưa ra ASP.NET MVC và tôi đã khá ngạc nhiên về thực tế là "Tại sao cần nhiều hơn công nghệ ASP.NET " và nhiều người vẫn còn đang cân nhắc.
Nhiều người nói rằng ASP.NET MVC thay thế ASP.NET Web Forms. Nhưng đó không phải đúng sự thật. Cả hai đều có ưu và khuyết điểm của riêng. Không ai có thể nói hay dạy cho chúng ta phải sử dụng cái nào nhưng chúng ta có thể thảo luận về một số sự kiện đó sẽ giúp chúng ta có thể có sự lựa chọn giữa hai công nghệ trong số chúng. Và bài viết này sẽ giúp bạn.
webformvsmvc01.JPG
Nào  cũng cố gắng tìm ra câu trả lời cho một số câu hỏi như thế
  • ASP.NET là gì?
  • ASP.NET Web Forms là gì?
  • MVC là gì?
  • ASP.NET MVC là gì?
webformvsmvc02.JPG
Nếu bạn là nhà phát triển ASP.NET MVC cao cấp hoặc nhiều kinh nghiệm, người đã biết MVC thì bài viết này sẽ giúp bạn thay đổi khái niệm về nó.
Nói về Visual
webformvsmvc03.JPG
Microsoft ban đầu tạo ra Visual. Với sự giúp đỡ của các công nghệ như Visual Basic, Visual C++ Microsoft kích hoạt RAD (nhanh chóng phát triển ứng dụng) của các ứng dụng sử dụng đồ họa. Các tính năng như kéo và thả và được các nhà phát triển tập trung nhiều hơn hướng đến chức năng business của ứng dụng chứ không phải là thiết kế giao diện người dùng. 
Tuy nhiên, công nghệ này được giới hạn, khi nói đến web lựa chọn duy nhất với Microsoft là ASP.
Các công nghệ Web
Khi chúng ta nói công nghệ web, chúng ta có ASP cổ điển, php, jsp, ROR, ASP.NET Web Forms, ASP.NET MVC.... ASP cổ điển là một trong những công nghệ web được giới thiệu bởi Microsoft. Điểm đau lớn nhất với ASP cổ điển là code thô và bảo trì. Giả định một kịch bản có một số hộp văn bản và một nút. Vào nút bạn nhấp vào xác nhận dữ liệu máy chủ, nếu xác nhận thành công dữ liệu sẽ được lưu trữ vào cơ sở dữ liệu và trong trường hợp nó không thành công, thông báo lỗi sẽ được hiển thị đến người sử dụng trong form nhãn màu đỏ. Bạn biết vấn đề lớn nhất với kịch bản này là gì? Bạn phải làm rất nhiều khâu.
1. Trước tiên hãy trở lại tự bài bằng cách thiết lập giá trị thuộc tính action của form đến trang giống thế.
2. Giá trị hộp văn bản sẽ được xóa trên nút click, vì vậy chỉ chọn bên trái sẽ lấy giá trị từ dữ liệu được đăng.
3. Xác nhận trường hợp không thành công bạn phải rõ ràng
a. Đặt tất cả các giá trị trở lại các hộp văn bản tương ứng từ các dữ liệu được đăng
b. Hiển thị thông báo lỗi.
(Sử dụng Ajax là một phương pháp thay thế tôi đã cố gắng để giải thích các công việc thủ công cần được thực hiện với ASP cổ điển).
Visual trong Web
Các công nghệ như Visual Basic được giới hạn cho các ứng dụng độc lập, khi nói đến web , chỉ tùy chọn trái với Microsoft là ASP cổ điển.
Khi chúng ta nói về Web và Desktop, có hai điều cần được xem xét
  1. Làm thế nào quản lý trạng thái công việc?
  2. Làm thế nào để request/response công việc?
Web hoạt động trên giao thức HTTP. Chúng ta sẽ có yêu cầu và phản ứng độc lập và đáp ứng yêu cầu trước đó. Không giống như máy tính để bàn không có giá trị biến sẽ được bảo tồn và trường hợp không hoàn thành mô hình lập trình hướng. Giống như máy tính để bàn, nó sẽ chờ đợi cho người sử dụng đầu vào, nhưng tất cả các đầu vào người sử dụng và hành động tương tác như là một yêu cầu mới (get/post) đến máy chủ.
Cuối cùng Microsoft đã đưa ra cái gọi là ASP.NET Web Forms.
ASP.NET là gì?
ASP.NET là một ứng dụng Web của Microsoft được xây dựng trong Common language runtime chạy ngôn ngữ chung để xây dựng các trang web động bằng cách sử dụng một trong các ngôn ngữ lập trình như C#, VB.NET. Nó hỗ trợ 2 mô hình Web Forms và ASP.NET MVC.
webformvsmvc04.JPG
Web Forms là gì?
Microsoft lần đầu tiên đưa ra ASP.NET Web Forms từ ASP mà giải quyết rất nhiều vấn đề bằng cách tạo ra mức độ trừu tượng cao hơn trên web và mô hình mô phỏng trạng thái cho các nhà phát triển Web. Trong các khái niệm web form như postback (gửi dữ liệu từ form đến cùng một trang) và ViewState (duy trì các giá trị điều khiển trong postbacks) được giới thiệu. Và những phần thú vị nhất là nó không yêu cầu phải viết ngay dòng mã. Với Web form Microsoft đã cố gắng mang lại những mô hình Visual Basic vào web.
webformvsmvc05.JPG
Chúng ta hãy nói về những lợi thế và bất lợi của Web Forms.
Ưu điểm:
Web Forms hỗ trợ nhiều trình điều khiển máy chủ.
Trong khi làm việc với HTML thuần túy bạn có thể thấy, mọi thứ không phải luôn luôn cùng một lúc tất cả các nơi. 
Một giao diện người dùng sẽ rất tốt trong IE có thể làm phân tâm trong Firefox hoặc ngược lại. 
webformvsmvc06.png
ASP.NET server control phát hiện trình duyệt và tạo ra html thích hợp và nếu cần thì đòi hỏi JavaScript.
Nhiều điều khiển máy chủ như GridView và ListView đi kèm với khả năng liên kết dữ liệu giảm rất sức lực và mã được viết.
Hỗ trợ cho ViewState: Bạn có thể đã nghe nói vài lần "HTTP là một giao thức phi trạng thái". Thông thường điều khiển sẽ không giữ lại giá trị của chúng giữa các request. Nhưng Web Forms là đạt được bằng cách lưu trữ cuối cùng trangjt hái được biết đến mỗi điều khiển trong trang client riêng của mình trong các form của trường ẩn được gọi là ViewState.
Lập trình điều khiển sự kiện
webformvsmvc07.png
Với sự giúp đỡ của:
  • Code behind
  • Self postback mechanism (posting back form to the same page)
  • ViewState 
Microsoft đã giới thiệu lập trình hướng sự kiện trong thế giới internet.
Nhà phát triển sẽ không dựa trên phương thức POST, GET để xử lý các tương tác người dùng với máy chủ. Ví dụ người dùng sẽ kéo điều khiển (nút) đến trang, chỉ cần nhấp đúp chuột vào nó để tạo ra các mã để xử lý người dùng nhấp chuột trên máy chủ. Có bấy nhiêu thôi. Người dùng không quan tâm đến những gì xảy ra bên trong.
Phát triển ứng dụng nhanh chóng: Rich server controls, tổ chức mô hình điều khiển Event và ViewState làm tăng tốc độ phát triển ở mức độ lớn, nhà phát triển sẽ được trừu tượng hóa từ rất nhiều về sự phức tạp nền.
Ít nỗ lực tìm hiểu: Sử dụng điều khiển máy chủ và phát triển mạnh mẽ ViewState có thể phát triển các ứng dụng thế giới thực tối thiểu HTML và JavaScript.
Bất lợi:
Kiến trúc Project: Không có kiến trúc project cố định được xác định trước để tạo ra các ứng dụng web khi nói đến Web Forms. Nhà phát triển có tính linh hoạt đầy đủ cho việc lựa chọn kiến trúc của riêng họ. 
webformvsmvc08.png
Người ta có thể sử dụng cơ bản ba kiến trúc lớp phân chia hệ thống vào giao diện người dùng, lớp business và lớp Data access hoặc nâng cao hơn như Model-View-Presenter. Thậm chí người ta có thể lựa chọn code behind và viết tất cả mọi thứ ở đó được xem là thực tiễn tốt. Code behind được kết nối chặt chẽ với giao diện người dùng, kết thúc với presentation logic.
Unit Testing: Trong kết thúc Code behind Web Forms với rất nhiều xử lý sự kiện, làm cho đơn vị tự động kiểm thử nhiệm vụ không thể. 
Lưu ý: ngay cả với sự trợ giúp của mô hình kiểm thử (sử dụng MOQ hoặc rhinomoq), chúng ta không thể ‘sender' và 'EventArgs ' trong xử lý sự kiện. 
webformvsmvc09.jpg
Và khi chúng ta nói về việc sử dụng TDD, Code behind đơn vị kiểm thử (presentation logic) trở nên rất quan trọng.
Hiệu suất: ViewState sẽ trở thành giải pháp cho một số vấn đề với ASP cổ điển nhưng nó cũng trở thành một vấn đề. ViewState được lưu trữ trong trang kết quả tăng kích thước trang để giảm hiệu suất.
Reusability: Chúng ta hãy nói về một ví dụ khác, nơi chúng ta có nghĩa vụ phải xây dựng 2 giao diện người dùng
webformvsmvc10.png
  • Màn hình nhân viên thuế
  • Màn hình không phải tính thuế nhân viên
Bây giờ hầu hết code behind được tương tự cho cả hai màn hình. 
Một solution sẽ được thêm một số nếu điều kiện trong code behind và tạo ra giao diện người dùng duy nhất.
Điều này sẽ vi phạm nguyên tắc đơn Trách nhiệm mà lý do thực thể phần mềm phải được thay đổi, bởi vì trong trường hợp này nhân viên sẽ được thay đổi bất cứ khi nào bất kỳ thay đổi thông tin chịu thuế/không phải tính thuế.
Thứ hai, nó có thể là hai giao diện người dùng:
Ít Kiểm soát HTML - Trong Web Forms nhiều lần chúng ta không chắc chắn về html chúng ta sẽ nhận được vào cuối tích hợp với các khuôn khổ JavaScript jQuery như một nhiệm vụ khó khăn
SEO
webformvsmvc11.jpg
URL trỏ đến trang ASPX cố định mà có thể được trang trí với một số chuỗi truy vấn. Chúng không phải là sử dụng thân thiện và ảnh hưởng đến SEO.
Ít hỗ trợ cho sự phát triển song song: trang ASPX chặt chẽ cùng với các tập tin code behind. Vì vậy, nó không thể rằng 2 nhà phát triển khác nhau làm việc trên một phần (một trên aspx và một code behind) tại cùng một thời điểm.
ASP.NET 4.0
ASP.NET 4.0 đã đưa ra một số tính năng tốt để khắc phục một số các vấn đề trên

ViewState: Cung cấp các cách để vô hiệu hóa hoặc kiểm soát kích thước của ViewState. (Tuy nhiên, không có sự ép buộc hoặc quy tắc cố định mà sẽ nói để làm như vậy).
Định tuyến URL: Sử dụng URL định tuyến chúng ta có thể cung cấp URL của chúng ta thay đường dẫn vật lý của trang.
ID: Trong ASP.NET 4.0, chúng ta có kiểm soát tốt hơn Id của các phần tử và do đó tích hợp với JavaScript trở nên dễ dàng. (Chúng ta không có quyền kiểm soát hoàn toàn HTML được tạo ra).
Ngay cả sau khi sự phát triển của các tính năng cách mạng của ASP.NET,
1. Nó vẫn không thể giải quyết các vấn đề của kiểm tra đơn vị
2. Tôi chưa bao giờ nhìn thấy bất kỳ nhà phát triển ASP.NET Web Form cố gắng vô hiệu hóa các ViewState.
3. Chúng ta đã nhận một số kiểm soát ID của các phần tử, nhưng không hoàn toàn kiểm soát HTML, vẫn còn có vấn đề để thực hiện JavaScript.
MVC là gì?
MVC là một mô hình kiến trúc.
Nhiều người sử dụng nó bao gồm cả Java. Đó không phải là khái niệm mới mà Microsoft đưa nó lên. ASP.NET MVC là một cái gì đó chúng ta nên nói về. Tuy nhiên, trước khi cho phép rõ ràng một số thuật ngữ MVC.
Patterns - Trong Pattern từ đơn giản là một giải pháp cho một vấn đề trong một bối cảnh.
Kiến trúc Patterns - kiến trúc Pattern là một cái gì đó mà giải quyết vấn đề của chúng ta ở cấp độ hệ thống phụ hoặc cấp module ngắn. Nó đề với các vấn đề liên quan đến kiến trúc của một dự án. Nó cho chúng ta biết làm thế nào chúng ta có thể phân chia hệ thống và đặc biệt là lý do tại sao. Chúng ta làm thư viện Class, Linh kiện, các dịch vụ Web để giải quyết vấn đề.
MVC Khi chúng ta nói về ứng dụng, chúng ta sẽ có input logic, business logic và giao diện người dùng logic và MVC là một mô hình kiến trúc cho phép chúng ta phát triển ứng dụng có lỏng lẻo khớp nối giữa mỗi người trong số những phần tử này. 
Mục đích chính đằng sau mô hình MVC là tách quan tâm. Nó làm cho presentation hoặc giao diện người dùng không biết gì về business và logic tương tác người dùng. 
Theo MVC hệ thống nên được phân chia như M (Model), V (View) và C (Controller).
webformvsmvc12.jpg
Model được xem là thông minh và xử lý các quy tắc business, logic và dữ liệu và sẽ được độc lập của các bộ phận khác của MVC (controller và View).
Controller xử lý các tương tác người dùng và Input logic. Nó biết về cả hai Model và View.
View được coi là ngớ ngẫn và là đại diện đầu ra của mô hình dữ liệu. Nó có thể là một bảng excel, một trang web hiển thị danh sách các hồ sơ, hoặc chỉ một văn bản đơn giản. View được biết như là Model.
ASP.NET MVC là gì?
webformvsmvc13.jpg
ASP.NET MVC là một trong những  ứng dụng web của Microsoft được thiết kế theo framwork. Nó được xây dựng trên CLR và hoàn toàn dựa trên kiến trúc MVC và controllers và Views. ASP.NET không có hỗ trợ cho các control ViewState và server, vì vậy chúng ta sẽ có được cảm nhận của web cũ ở đây.
Ưu điểm:
Kiến trúc project: Một trong những lợi thế của việc sử dụng ASP.NET MVC là nó thực thi tách các concern. Vì vậy, có rất ít cơ hội nhận được những thứ phức tạp hơn.
webformvsmvc14.png
Test Driven development and Reusability: 
o Trong MVC controller là một lớp riêng biệt để kiểm thử tự động có thể có tính năng phát triển Test Driven.
o Controller không bị ràng buộc với bất kỳ View nào và như vậy có thể được sử dụng lại cho nhiều view.
webformvsmvc15.png
Hiệu suất: ASP.NET MVC không hỗ trợ trạng thái view, vì vậy sẽ không có bất kỳ quản lý state tự động làm giảm kích thước trang và do đó nhận được hiệu suất.
Full control over HTML: ASP.NET MVC không hỗ trợ điều khiển máy chủ, chỉ có tùy chọn có sẵn được sử dụng điều khiển đầu vào html, vì vậy sẽ đảm bảo về html cuối cùng trả lại cuối cùng. Chúng ta cũng sẽ có 'id' của mọi phần tử. Và do đó, tích hợp các ứng dụng ASP.NET MVC với bên thứ ba thư viện JavaScript như jQuery trở nên dễ dàng.
Hỗ trợ phát triển song song: Trong ASP.NET MVC lớp liên kết lỏng lẻo với nhau, do đó, một trong những nhà phát triển có thể làm việc trên điều khiển, cùng một lúc khác View và nhà phát triển thứ ba trên Model. Điều này được gọi là phát triển song song.
SEO, URL định tuyến và REST: tính năng định tuyến cho phép xử lý tất cả các URL như là một nguồn lực hỗ trợ các giao diện RESTful.
webformvsmvc16.JPG
URL thân thiện với người sử dụng và có thể cải thiện SEO.
Mở rộng: ASP.NETMVC hỗ trợ nhiều view giống như aspx và nếu cần chúng ta có thể tạo riêng 
Tồn tại các tính năng ASP.NET: ASP.NET MVC framework được xây dựng trên đầu trang của ASP.NET framework và do đó cung cấp cho nhà phát triển sử dụng nhiều tính năng tốt như hình thức xác thực, xác thực các cửa sổ, caching, session và quản lý state ...
Nhược điểm:
Nỗ lực tìm hiểu nhiều hơn - Sự vắng mặt của mô hình lập trình hướng sự kiện và ViewState làm cho ASP.NET MVC framework khó khăn đối với lập trình viên với không có hoặc có ít kinh nghiệm trong phát triển ứng dụng web.
ASP.NET MVC hoạt động như thế nào?
webformvsmvc17.JPG
1. Người dùng requet một số tài nguyên trong máy chủ (bằng cách đặt một số URL trong trình duyệt).
2. Request đưa đến controller đầu tiên (định tuyến engine  chịu trách nhiệm cho quyết định request sẽ được xử lý bởi controller. Trong bài viết này, chúng ta sẽ không nói sâu về nó).
3. Controller if required talk to model for data. 
4. Model hoạt động trên cơ sở dữ liệu (hoặc trên một số nguồn dữ liệu khác) và dữ liệu trở lại (dưới hình thức của các đối tượng business) đến controller.
5. Controller lựa chọn View thích hợp (like say Customer view which will may contain some html tables, drop downs, textboxes…).
6. Điều khiển qua các dữ liệu (mô hình dữ liệu lấy ở bước 4) để xem lựa chọn (ở bước 5), nơi dữ liệu sẽ được phổ biến theo sự thuận tiện.
7. Bộ điều khiển sẽ gửi lại view đến người dùng.
Điều này đã được nhận được request, tương tự cũng xảy ra cho bài viết. Chỉ thay vì đặt URL trong trình duyệt của người sử dụng sẽ làm một số hành động trên trang được yêu cầu và bắt đầu luồng với bộ điều khiển. Hành động như cách nhấn vào nút, thay đổi giá trị drop down.
ASP.NET Web Forms và ASP.NET MVC?
Mỗi "sự lựa chọn tốt nhất" cho một giải pháp cụ thể tùy thuộc vào yêu cầu của ứng dụng và nền tảng của các thành viên trong nhóm tham gia. Khi phải đối mặt với một quyết định lựa chọn giữa ASP.NET Web Forms hoặc ASP.NET MVC nó là quan trọng để biết rằng công nghệ không có nghĩa là thay thế.
Hai yếu tố quan trọng bạn nên xem xét trong khi sự lựa chọn là
1. Phát triển ứng dụng nhanh chóng - Nếu bạn muốn phát triển nhanh chóng ASP.NET Web Forms là cơ hội duy nhất mà bạn đang có, bạn có thể thậm chí không cần cân nhắc ASP.NET MVC cho RAD. (Lý do RAD giống như khách hàng không phải trả quá nhiều, hoặc ứng dụng sẽ được sử dụng để chỉ một hoặc hai tháng và sẽ không cần bảo trì nhiều.)
2. Unit Testing - Nếu kiểm thử đơn vị tự động là yếu tố quan trọng nhất cho bạn thì MVC sẽ là tốt nhất.
Hơn nữa, những gì bạn có thể làm là ghi lại tất cả các yêu cầu dự án và cố gắng để so sánh chúng giữa ưu và khuyết Web Forms và MVC. Và thử đặt câu hỏi sau
1. Liệu team của bạn có kinh nghiệm tốt với Web Forms hoặc Windows Forms? 
Nếu có thì có thể nghiên cứu ASP.NET MVC và công việc tẻ nhạt cho team, bởi vì lập trình viên đã được sử dụng với ViewState và sự kiện lập trình điều khiển bây giờ di chuyển sẽ khó khăn. 1 điểm cho Web Forms .
2. Nhóm của bạn có kinh nghiệm tốt với ASP.NET MVC? 
Nếu có ASP.NET MVC được 1 điểm
3. Nhóm của bạn có kinh nghiệm về công nghệ ASP hoặc không phải của Microsoft như android, ios, JSP, ROR, PHP? 
Nếu bạn chuyên JSP hoặc ASP thì bạn có thể quen với HTTP GET và POST và thậm chí bạn có thể quen MVC bởi vì hầu hết trong số chúng sử dụng MVC theo mặc định. 1 điểm cho ASP.NET MVC.
4. JavaScript sử dụng rộng rãi? 
Nếu có, MVC được điểm bởi vì bạn có toàn quyền điều khiển HTML. 1 điểm ASP.NET MVC.
5. Hiệu suất tốt? 
Không có hỗ trợ cho ViewState ASP.NET MVC cung cấp đạt được hiệu suất tốt hơn ASP.NET Web Forms truyền thống. 1 điểm ASP.NET MVC.
6. Kế hoạch tái sử dụng cùng một logic đầu vào? 
Nếu có thì nên gắn bó với MVC.
Kết luận
Tôi nghĩ rằng bạn cần phải có trang bị đủ thông tin để đưa ra quyết định những gì là tốt nhất cho dự án của bạn. Quyết định hoàn toàn phụ thuộc vào nhóm của bạn và yêu cầu dự án.
Hy vọng tất cả các bạn thích đọc bài viết này. Cảm ơn bạn đã kiên nhẫn.

Nguồn bài viết: Dngaz.com(theo codeproject)

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML