Основи на MVC в C#
Основи на MVC в C#
MVC (Model-View-Controller) е архитектурен шаблон, широко използван в софтуерното инженерство, особено за разработването на уеб приложения. MVC разделя приложенията на три основни компонента - модел, изглед и контролер, което помага за постигане на разделение на интересите (separation of concerns).
Архитектура на MVC
- Модел (Model): Представлява състоянието на приложението, бизнес логиката и операциите, които трябва да се извършат. Моделите са отговорни за управление на данните и бизнес правилата.
- Изглед (View): Отразява представянето на данни (UI). Изгледите използват Razor view engine за вграждане на .NET код в HTML.
- Контролер (Controller): Обработва входа от потребителя, взаимодейства с моделите и избира изгледите за показване.
Структура на Директориите
Примерна директорна структура в MVC проект в C#:
MVCProject/
│
├── Controllers/
│ ├── HomeController.cs
│ └── AccountController.cs
│
├── Models/
│ ├── User.cs
│ └── Account.cs
│
├── Views/
│ ├── Home/
│ │ ├── Index.cshtml
│ │ └── About.cshtml
│ │
│ └── Account/
│ ├── Login.cshtml
│ └── Register.cshtml
│
├── wwwroot/
│ ├── css/
│ ├── images/
│ └── js/
│
├── appsettings.json
└── Startup.cs
Примерен Код
Контролер - HomeController.cs
// В папката Controllers/
using Microsoft.AspNetCore.Mvc;
public class HomeController : Controller {
public IActionResult Index() {
return View(); // Връща View за начална страница
}
}
Модел - User.cs
// В папката Models/
public class User {
public string Name { get; set; }
public int Age { get; set; }
}
Изглед - Index.cshtml
<!-- В папката Views/Home/ -->
@{
ViewData["Title"] = "Home Page";
}
<div>
<h1>Welcome to the Home Page</h1>
</div>
Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
public class Startup {
public Startup(IConfiguration configuration) {
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services) {
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
// Настройки на маршрутизацията и други конфигурации
}
}
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Описание: appsettings.json
съдържа конфигурационни настройки за приложението, като нива на логване и разрешени хостове.
Допълнителни Компоненти в MVC
Рутиране (Routing)
ASP.NET Core MVC използва мощни рутиращи механизми, които позволяват дефинирането на ясни и SEO-оптимизирани URL адреси.
Пример за конвенционално рутиране:
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Пример за атрибутно рутиране:
[Route("api/[controller]")]
public class ProductsController : Controller {
[HttpGet("{id}")]
public IActionResult GetProduct(int id) {
// ...
}
}
Моделно Свързване (Model Binding)
Моделното свързване в ASP.NET Core MVC автоматично преобразува входящите данни от HTTP заявката в параметри на методите на контролера.
public async Task<IActionResult> Login(LoginViewModel model) {
// ...
}
Валидация на Модела (Model Validation)
ASP.NET Core MVC поддържа валидация на модела чрез декорации с атрибути, предоставяйки както клиентска, така и сървърна валидация.
public class LoginViewModel {
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
Зависимостна Инжекция (Dependency Injection)
ASP.NET Core MVC поддържа вградена зависимостна инжекция, която позволява на к онтролерите да заявяват нужните им услуги чрез конструктори.
Филтри (Filters)
Филтрите в MVC позволяват изпълнението на логика преди или след методите на контролерите. Те са полезни за обработка на cross-cutting concerns като авторизация и обработка на грешки.
Области (Areas)
Областите предоставят начин за разделяне на голямо ASP.NET Core MVC приложение на по-малки функционални сегменти.
Заключение
MVC в C# предоставя ясно разделение между логиката, потребителския интерфейс и управлението на данни. Това улеснява разработката, поддръжката и тестването на приложенията, като същевременно подобрява организацията и модуларността на кода. Използването на MVC архитектурата в C# осигурява множество предимства, включително:
Web APIs
ASP.NET Core MVC осигурява отлична платформа за създаване на Web APIs, които могат да обслужват разнообразни клиенти, включително браузъри и мобилни устройства.
- Поддръжка на HTTP content-negotiation с вградена поддръжка за форматиране на данни като JSON или XML.
- Лесно включване на поддръжка за Cross-Origin Resource Sharing (CORS).
Тестваемост
Фреймуъркът е проектиран с мисъл за тестваемост, като предлага вградена поддръжка за unit и integration тестове.
- Използването на интерфейси и зависимостна инжекция улеснява unit тестването.
- Функционалности като TestHost и InMemory провайдър за Entity Framework улесняват integration тестването.
Razor View Engine
- Razor е мощен и гъвкав шаблонен двигател за създаване на динамичен HTML.
- Позволява смесването на C# код с HTML, улеснявайки разработката на интерактивни потребителски интерфейси.
Strongly Typed Views
- Razor view-тата в MVC могат да бъдат строго типизирани, което подобрява сигурността и интуитивността при разработка.
- Контролерите могат да подават строго типизирани модели към view-тата, осигурявайки type-checking и IntelliSense в Visual Studio.
Tag Helpers
- Tag Helpers улесняват дефинирането на HTML елементи със серверен код.
- Те предоставят HTML-friendly синтаксис и богат IntelliSense за генериране на Razor markup.
View Components
- View Components са подобни на partial views, но със свързана логика.
- Те позволяват пакетиране на логиката за рендиране и нейното повторно използване в приложението.