Trang chủ / ASP.NET Core / Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core

Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core

  • Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core

Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core. Trong bài trước bạn đã tìm hiểu về hướng dẫn cài đặt và tạo chương trình đầu tiên trong ASP.NET Core. Nhưng trước khi tiếp tục hướng dẫn các bạn lập trình ASP.NET Core như thế nào, mình sẽ giới thiệu các bạn về mô hình MVC, mô hình mà bất kỳ ai lập trình, nhất là web điều nhất định phải biết, Sau đó mình sẽ giới thiệu về mô hình MVC trong ASP.NET Core cũng như cách tạo project sử dụng mô hình MVC trong ASP.NET Core

1. Thế nào là mô hình MVC ?

Mình bắt đầu tiếp cận mô hình MVC từ hồi năm ngoái, lúc đó đang có một đồ án về web trên trường, lúc đó mình đã bắt đầu năm 3, cái tên mô hình MVC nghe rất lạ lẫm với mình, nhưng sau khi tìm hiểu, MVC rất dễ và rất ích lợi cho việc lập trình web đấy bạn. Lúc đó mình còn hơi tiếc vì không biết nó sớm hơn.

Mô hình MVC là mô hình kiến trúc phần mềm với 3 thành phần Models, Views, và Controller. Khi sử dụng mô hình này, yêu cầu người dùng sẽ được chuyển đến (routed) một Controller, Controller này có trách nhiệm làm việc với Model để thực hiện các hành động của người dùng và có thể lấy kết quả của các câu truy vấn. Controller sẽ chọn View tương ứng để hiển thị cho người dùng, và cung cấp cho cho nó với bất kỳ dữ liệu của Model mà nó đòi hỏi.

Bạn hãy xem so đồ sau

Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core
Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core

Nhìn vào sơ đồ này bạn sẽ dễ dàng thấy được: cả View và Controller đều phụ thuộc vào Model. Tuy nhiên, Model không phụ thuộc vào View và Controller. Đây là một trong những lợi ích của việc tách. Sự tách biệt này cho phép Model được xây dựng và trình bày trực quan.

Chức năng của Model

Chứa tất cả các nghiệp vụ logic, các phương thức xử lý, truy xuất database, những đối tượng mô tả dữ liệu như Class, hàm xử lý

Chức năng của View

View được tiếp nhận dữ liệu từ controller và tiến hành hiển thị nội dung đến giao diện người dùng bằng mã HTML. Trong ASP.NET Core sẽ sử dụng Razor để đưa các code .NET đến HTML.

Chức năng của Controller

Controller là thành phần xử lý tương tác người dùng, làm việc với các Model, và cuối cùng là chọn một View để hiển thị. Trong một ứng dụng MVC, View chỉ để hiển thị thông tin, Controller xử lý và phản ứng và tương tác với người dùng. Trong mô hình MVC, Controller là điểm khởi đầu, có trách nhiệm lựa chọn các Model để làm việc và View để hiển thị

Ưu điêm và nhược điểm của mô hình MVC

1. Ưu điểm:

  • Dễ dàng lập trình, nâng cấp, debug và test ứng dụng nhờ được chia thành các thành phần độc lập,
  • Thích hợp cho các dự án lớn, gồm nhiều người giúp dễ dàng làm việc và phân chia công việc với các thành viên

2. Nhược điểm:

Không thích hợp cho dự án nhỏ do bạn sẽ phải tốn nhiều thời gian cho quá trình phát triển theo mô hình MVC.

2. Mô hình MVC trong ASP.NET Core

–  Mô hình MVC trong ASP.NET Core là một mã nguồn mở nhẹ, được kiểm chứng và trình bày cách tối ưu để sử dụng với ASP.NET Core

–  Mô hình MVC trong ASP.NET Core cung cấp một mô hình để xây dựng các trang web động hiệu quả. Nó cung cấp cho bạn toàn quyền kiểm soát đánh dấu, hỗ trợ phát triển TDD thân thiện và sử dụng các tiêu chuẩn web mới nhất

– ASP.NET Core trong Mô hình MVC bao gồm các thành phần:

  • Routing
  • Model binding
  • Model validation
  • Dependency injection
  • Filters
  • Areas
  • Web APIs
  • Testability
  • Razor view engine
  • Strongly typed views
  • Tag Helpers
  • View Components

Chúng ta sẽ đi sang chức năng của từng thành phần:

Routing

Routing bạn có thể hiểu đơn giản nó là một thành phần URL cho phép bạn xây dựng các URL một cách dễ hiểu, dễ tìm kiếm và tối ưu hóa công cụ tìm kiếm (SEO) mà không cần quan tâm các tập tin trên máy chủ được tổ chức thế nào. Bạn chỉ cần định nghĩa routes của bạn bằng cách sử dụng các routes được hỗ trợ và được mặc định với các giá trị tùy chọn.

Với Routing mình chỉ giới thiệu ngắn gọn, mình sẽ dành 1 viết để nói về Routing.

Model binding

ASP.NET Core với Mô hình MVC model binding giúp chuyển đổi dữ liệu theo yêu cầu từ client (giá trị, dữ liệu route, các thông số chuổi truy vấn, tiêu đề HTTP) vào các đối tượng mà Controller có thể xử lý. Kết quả là logic Controller của bạn không phải làm công việc tìm ra các dữ liệu yêu cầu gửi đến; nó chỉ đơn giản có các dữ liệu như tham số cho các hành động của nó.

Model validation

Mô hình MVC trong ASP.NET Core hỗ trợ validation bằng cách giúp xác thực dữ liệu trong Model của bạn. Thuộc tính này sẽ kiểm tra trên các client trước khi gửi đến máy chủ, cũng như trên máy chủ trước khi các hành động được gọi. Hãy xem thử ví dụ bên dưới

Sau đó một controller sử dụng

Framework sẽ xử lý yêu cầu xác thực dữ liệu trên cả client và trên server.

Dependency injection

ASP.NET Core hỗ trợ xay dựng dependency injection (DI). Trong mô hình MVC ASP.NET Core, các Controller có thể yêu cầu các dịch dụ cần thiết thông qua các constructors của ASP.NET Core, cho phép họ thực hiện theo Explicit Dependencies Principle

Cách sử dụng dependency inujection trong file View bằng “@inject” như sau:

Filters

Filters giúp các nhà phát triển gói gọn các yêu cầu của họ, như xử lý ngoại lệ hoặc xác thực. Bộ lọc có thể được sử dụng để điều khiển hoặc thực hiện các hành động dưới dạng thuộc tính. Một số sộ lọc bạn có thể thấy như là Authorize

Areas

Areas là một cách để phân chia các ASP.NET Core với Mô hình MVC web thành các nhóm chức năng nhỏ hơn. Với mỗi Area chính là một cấu trúc MVC. Trong một project MVC, các thành phần như Model, Controller và View được lưu giữ trong các thư mục khác nhau, và MVC sử dụng quy ước đặt tên để tạo ra các mối quan hệ giữa các thành phần. Đối với dự án lớn, việc phân chia các Area sẽ giúp tạo ra những phân vùng với những chức năng riêng biệt. Ví dụ, đối với một project thương mại điện tử bạn sẽ cần các chức năng như là thanh toán, tìm kiếm, checkout… và lúc này bạn sẽ chia thành các Area nhỏ hơn như là checkout, billing, và Seach, tương ứng với mỗi area lúc này đều sẽ có các thành phần Model, Controller, View.

Web APIs

Ngoài việc là một nền tảng tuyệt vời để xây dựng các trang web. Mô hình MVC trong ASP.NET Core còn hỗ trợ rất tốt cho việc xây dựng các Web API. Bạn có thể xây dựng các services mà tại đó có thể tiếp cận tới các client bao gồm trình duyệt và các thiết bị di động.

Framework hỗ trợ HTTP với việc xây dựng các định dạng dữ liệu như là JSON và XML.

Sử dụng các link cho phép hỗ trợ hypermedia. Cho phép chia sẻ tài nguyên gốc (CORS) để API Web của bạn có thể chia sẻ trên nhiều ứng dụng Web

Testability

Framework sử dụng các interfaces và dependency injection nên rất phù hợp để kiểm thử đơn vị, và framework bao gồm các tính năng (như một TestHost và cung cấp bộ nhớ cho Entity Framework)

Razor view engine

Hồi trước thì Microsoft còn sử dụng Web form, nhưng đến ASP.NET Core thì Web form đã không còn được sử dụng nữa, Microsoft chỉ còn sử dụng Razor view engine để hiển thị nội dung. Razor gọn nhẹ, ý nghĩa và là một ngôn ngữ đánh dấu giúp định nghĩa các view được nhúng code C#. Razor được sử dụng để tự động tạo ra nội dụng web trên máy chủ. Bạn có thể kết hợp giữa code server với code và nội dung từ client.

Sử dụng Razor bạn có thể định nghĩa các layouts, partial views và thay thế các sections.

Strongly typed views

Razor view trong MVC có thể được sử dụng rất hữu ích với Model của bạn. Hơi khó giải thích, mình chưa biết giải thích thế nào, dùng ví dụ sẽ dễ hiểu hơn

Ví dụ, View được định nghĩa từ một Model có kiểu IEnumberable<Product>

Tag Helpers

Tag Helpers giúp bạn tạo ra và dựng các phần tử HTML trong Razor. Bạn có thể sử dụng Tag Helpers để định nghĩa các tags (ví dụ, <environment>) hoặc chỉnh sửa các hành vi của các thẻ hiện tại (ví dụ, <label>). Tag Helpers liên kết với các phần từ cụ thể dựa vào tên và thuộc tính của các phần tính.

Có rất nhiều Tag Helpers được xây dựng phục cho việc tạo form, link, load assets nhiều hơn nữa, nhiều hơn cả các kho có sẵn trên GitHub và các gói NuGet. Tag Helpers sử dụng C#  và hướng đến mục tiêu là các phần tử HTML dựa trên tên phần tử, thuộc tính phần tử, hoặc thẻ chính. Ví dụ, LinkTagHelper có thể được sử dụng để tạo ra một liên kết đến các hành động đăng nhập của AccountsController

Tag Helpers  giúp bạn có thể phát triển HTML thân thiện và một môi trường IntelliSense giàu để tạo HTML và Razor. Hầu hết các Tag Helpers được xây dựng nhắm đến mục tiêu là các phần tử HTML hiện có và cung cấp các thuộc tính từ phía máy chủ cho phần tử.

View Componets

View Componets cho phép bạn đóng gói và tái sử dụng nó thông qua ứng dụng View Components tương tự như Partial views, nhưng với liên kết logic

3. Xây dựng project ASP.NET Core theo mô hình MVC có sẵn trong Visual Studio

Thật ra việc tạo project MVC này mình đã nói rồi từ bài trước, nhưng hôm nay vẫn nhắc lại cho các bạn chưa biết.

Bước 1: Vào Visual Studio chọn File -> New Project

Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core - Ảnh 2
Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core – Ảnh 2

Bước 2: Chọn .Net  Core  và chọn templates “ASP.NET Core Web Application (.NET Core)” và đặt tên project với đường dẫn như hình.

Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core - Ảnh 3
Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core – Ảnh 3

Bước 3: Chọn Web Application và OK để tiến hành tạo ứng dụng

Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core - Ảnh 4
Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core – Ảnh 4

Trong Solution bạn có thể thấy các thư mục theo mô hình MVC bao gồm: Controllers, Views do mình đã tạo với null Authentication. 

Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core - Ảnh 5
Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core – Ảnh 5

Lời kết:

Vậy là mình đã hướng dẫn xong “Mô hình MVC là gì ? Mô hình MVC trong ASP.NET Core”, mình tin là bạn đã có hiểu cơ bản về Mô hình MVC và mô hình MVC trong ASP.NET Core. Hãy để lại bình luận bên dưới với chỗ nào chưa hiểu để mình sửa chữa bài viết tốt hơn và sau đó bạn có thể quay lại chuyên mục ASP.NET Core để tìm hiểu thêm các bài viết hữu ích, hoặc đến với series “Ứng dụng ASP.NET Core đầu tiên” nếu bạn mới học ASP.NET Core hoặc đi tiếp series này nếu bạn muốn biết thêm các khái niệm về MVC

Thông tin Nguyễn An Hoàng Nguyên

Đam mê về lập trình, thích viết lách. Có hứng thú với thương mại điện tử và kinh doanh

Check Also

widget trong template này

Generic Repository Pattern là gì ? Cách sử dụng trong ASP.NET Core

Cũng đã gần 3 tháng mình mới viết bài mới. 3 tháng trước mình đã …

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *