Přehled ASP.NET Core MVC

Autor: Steve Smith

ASP.NET Core MVC je bohatá architektura pro vytváření webových aplikací a rozhraní API pomocí vzoru návrhu Model-View-Controller.

Model MVC

Model-View-Controller (MVC) architektury odděluje aplikaci do tří hlavních skupin komponent: Modely, zobrazení a kontrolery. Tento model pomáhá dosáhnout oddělení obav. Pomocí tohoto vzoru se požadavky uživatelů směrují na kontroler, který zodpovídá za práci s modelem za provádění uživatelských akcí nebo načítání výsledků dotazů. Kontroler zvolí zobrazení, které se má uživateli zobrazit, a poskytne mu všechna data modelu, která vyžaduje.

Následující diagram znázorňuje tři hlavní komponenty a na které odkazují ostatní:

MVC Pattern

Toto vymezení zodpovědností vám pomůže škálovat aplikaci z hlediska složitosti, protože je jednodušší kódovat, ladit a testovat něco (model, zobrazení nebo kontroler), která má jednu úlohu. Je obtížnější aktualizovat, testovat a ladit kód, který má závislosti rozložené do dvou nebo více těchto tří oblastí. Logika uživatelského rozhraní se například obvykle mění častěji než obchodní logika. Pokud se kód prezentace a obchodní logika zkombinují do jednoho objektu, musí se při každé změně uživatelského rozhraní upravit objekt obsahující obchodní logiku. To často představuje chyby a vyžaduje opětovné testování obchodní logiky po každé minimální změně uživatelského rozhraní.

Poznámka

Zobrazení i kontroler závisí na modelu. Model ale závisí na zobrazení ani kontroleru. Toto je jedna z klíčových výhod oddělení. Toto oddělení umožňuje sestavit a otestovat model nezávisle na vizuální prezentaci.

Odpovědnosti modelu

Model v aplikaci MVC představuje stav aplikace a všechny obchodní logiky nebo operace, které by měly být provedeny. Obchodní logika by měla být zapouzdřena v modelu spolu s jakoukoli logikou implementace pro zachování stavu aplikace. Zobrazení se silnými typy obvykle používají typy ViewModel navržené tak, aby obsahovaly data, která se mají zobrazit v daném zobrazení. Kontroler vytvoří a naplní tyto instance Modelu ViewModel z modelu.

Zobrazit odpovědnosti

Zobrazení zodpovídají za prezentaci obsahu prostřednictvím uživatelského rozhraní. Pomocí Razor modulu zobrazení vloží kód .NET do kódu HTML. V zobrazeních by měla být minimální logika a každá logika by v nich měla souviset s prezentováním obsahu. Pokud zjistíte, že při zobrazení souborů potřebujete provádět velkou logiku, abyste mohli zobrazit data ze složitého modelu, zvažte použití komponenty zobrazení, modelu ViewModel nebo šablony zobrazení ke zjednodušení zobrazení.

Odpovědnost správce

Kontrolery jsou komponenty, které zpracovávají interakci uživatelů, pracují s modelem a nakonec vyberou zobrazení, které se má vykreslit. V aplikaci MVC se v zobrazení zobrazují pouze informace; kontroler zpracovává uživatelský vstup a interakci a reaguje na ně. V modelu MVC je kontroler počátečním vstupním bodem a zodpovídá za výběr typů modelů, se kterými se mají pracovat, a za zobrazení, se kterým zobrazením se má vykreslit (tedy jeho název – řídí, jak aplikace reaguje na danou žádost).

Poznámka

Kontrolery by neměly být příliš složité příliš mnoha zodpovědnostmi. Aby se logika kontroleru stala příliš složitou, nasdílejte obchodní logiku mimo kontroler a do doménového modelu.

Tip

Pokud zjistíte, že akce kontroleru často provádějí stejné druhy akcí, přesuňte tyto běžné akce do filtrů.

ASP.NET Core MVC

Architektura ASP.NET Core MVC je odlehčená opensourcová a vysoce testovatelná prezentační architektura optimalizovaná pro použití s ASP.NET Core.

ASP.NET Core MVC poskytuje způsob, jak vytvářet dynamické weby, které umožňují čisté oddělení obav. Poskytuje úplnou kontrolu nad revizemi, podporuje vývoj vhodný pro TDD a používá nejnovější webové standardy.

Směrování

ASP.NET Core MVC je založená na směrování ASP.NET Core, výkonné komponenty pro mapování adres URL, která umožňuje vytvářet aplikace, které mají srozumitelné a prohledávatelné adresy URL. To vám umožní definovat vzory pojmenování adres URL vaší aplikace, které dobře fungují pro optimalizaci vyhledávacích webů (SEO) a generování odkazů bez ohledu na to, jak jsou soubory na webovém serveru uspořádané. Trasy můžete definovat pomocí vhodné syntaxe šablony trasy, která podporuje omezení hodnoty trasy, výchozí hodnoty a volitelné hodnoty.

Směrování založené na konvencích umožňuje globálně definovat formáty adres URL, které vaše aplikace přijímá, a způsob, jakým se každý z těchto formátů mapuje na konkrétní metodu akce na daném kontroleru. Při přijetí příchozího požadavku směrovací modul parsuje adresu URL a shoduje se s ní s jedním z definovaných formátů url a potom zavolá metodu akce přidruženého kontroleru.

routes.MapRoute(name: "Default", template: "{controller=Home}/{action=Index}/{id?}");

Směrování atributů umožňuje určit informace o směrování pomocí dekódování kontrolerů a akcí pomocí atributů, které definují trasy vaší aplikace. To znamená, že definice tras se umístí vedle kontroleru a akce, ke které jsou přidružené.

[Route("api/[controller]")]
public class ProductsController : Controller
{
    [HttpGet("{id}")]
    public IActionResult GetProduct(int id)
    {
      ...
    }
}

Vazby modelu

ASP.NET vazby modelu Core MVC převádí data požadavku klienta (hodnoty formuláře, směrovací data, parametry řetězce dotazu, hlavičky HTTP) na objekty, které může kontroler zpracovat. V důsledku toho logika kontroleru nemusí provádět práci na zjišťování příchozích dat požadavků; jednoduše obsahuje data jako parametry svých metod akcí.

public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) { ... }

Ověření modelu

ASP.NET Core MVC podporuje ověřování tím, že objekt modelu dekóduje atributy ověření datových poznámek. Ověřovací atributy jsou kontrolovány na straně klienta před odesláním hodnot na server, stejně jako na serveru před zavolání akce kontroleru.

using System.ComponentModel.DataAnnotations;
public class LoginViewModel
{
    [Required]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

Akce kontroleru:

public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
    if (ModelState.IsValid)
    {
      // work with the model
    }
    // At this point, something failed, redisplay form
    return View(model);
}

Architektura zpracovává ověřování dat požadavků v klientovi i na serveru. Logika ověřování zadaná u typů modelů se přidá do vykreslených zobrazení jako nerušivé poznámky a vynucuje se v prohlížeči pomocí ověřování jQuery.

Injektáž závislostí

ASP.NET Core má integrovanou podporu injektáže závislostí (DI). V ASP.NET Core MVC mohou kontrolery vyžadovat potřebné služby prostřednictvím jejich konstruktorů, což jim umožní dodržovat zásadu explicitních závislostí.

Aplikace může také použít injektáž závislostí v zobrazení souborů pomocí direktivy @inject :

@inject SomeService ServiceName

<!DOCTYPE html>
<html lang="en">
<head>
    <title>@ServiceName.GetTitle</title>
</head>
<body>
    <h1>@ServiceName.GetTitle</h1>
</body>
</html>

Filtry

Filtry pomáhají vývojářům zapouzdřit průřezové otázky, jako je zpracování výjimek nebo autorizace. Filtry umožňují spouštění vlastní logiky předběžného zpracování a následného zpracování pro metody akcí a je možné je nakonfigurovat tak, aby běžely v určitých bodech v rámci kanálu provádění pro daný požadavek. Filtry lze použít na kontrolery nebo akce jako atributy (nebo je možné je spustit globálně). Součástí architektury je několik filtrů (například Authorize). [Authorize] je atribut, který se používá k vytvoření autorizačních filtrů MVC.

[Authorize]
public class AccountController : Controller

Oblasti

Oblasti poskytují způsob, jak rozdělit velkou webovou aplikaci ASP.NET Core MVC do menších funkčních seskupení. Oblast je struktura MVC uvnitř aplikace. V projektu MVC se logické komponenty, jako je model, kontroler a zobrazení, uchovávají v různých složkách a MVC používá zásady vytváření názvů k vytvoření vztahu mezi těmito komponentami. U velké aplikace může být výhodné rozdělit aplikaci do samostatných oblastí funkčnosti vysoké úrovně. Například aplikace elektronického obchodování s několika obchodními jednotkami, jako je pokladna, fakturace a vyhledávání atd. Každá z těchto jednotek má vlastní zobrazení, kontrolery a modely logických komponent.

Webová rozhraní API

Kromě skvělé platformy pro vytváření webů má ASP.NET Core MVC skvělou podporu pro vytváření webových rozhraní API. Můžete vytvářet služby, které se dostanou do široké škály klientů, včetně prohlížečů a mobilních zařízení.

Tato architektura zahrnuje podporu vyjednávání obsahu HTTP s integrovanou podporou formátování dat jako JSON nebo XML. Napište vlastní formátovací moduly , které přidávají podporu pro vlastní formáty.

K povolení podpory hypermedia použijte generování odkazů. Snadno povolte podporu sdílení prostředků mezi zdroji (CORS), aby se vaše webová rozhraní API dala sdílet napříč více webovými aplikacemi.

Testovatelnosti

Použití rozhraní a injektáž závislostí je vhodné pro testování jednotek a architektura obsahuje funkce (jako je testHost a poskytovatel InMemory pro Entity Framework), které také usnadňují a usnadňují integrační testy . Přečtěte si další informace o tom, jak testovat logiku kontroleru.

Razor view engine

ASP.NET zobrazení Core MVC používají Razor modul zobrazení k vykreslení zobrazení. Razor je kompaktní, výrazný a fluidní jazyk značek šablon pro definování zobrazení pomocí vloženého kódu jazyka C#. Razor slouží k dynamickému generování webového obsahu na serveru. Kód serveru můžete čistě kombinovat s obsahem a kódem na straně klienta.

<ul>
    @for (int i = 0; i < 5; i++) {
        <li>List item @i</li>
    }
</ul>

Razor Pomocí modulu zobrazení můžete definovat rozložení, částečná zobrazení a nahraditelné oddíly.

Zobrazení silného typu

Razor zobrazení v MVC můžou být silně napsaná na základě modelu. Kontrolery můžou předat model silného typu, aby zobrazení umožňovala kontrolu typů a podporu Technologie IntelliSense.

Například následující zobrazení vykreslí model typu IEnumerable<Product>:

@model IEnumerable<Product>
<ul>
    @foreach (Product p in Model)
    {
        <li>@p.Name</li>
    }
</ul>

Pomocné rutiny značek

Pomocné rutiny značek umožňují, aby se kód na straně serveru zúčastnil vytváření a vykreslování elementů HTML v Razor souborech. Pomocné rutiny značek můžete použít k definování vlastních značek (například <environment>) nebo ke změně chování existujících značek (například <label>). Pomocné rutiny značek se sváže s konkrétními prvky na základě názvu elementu a jeho atributů. Poskytují výhody vykreslování na straně serveru při zachování prostředí pro úpravy HTML.

Existuje mnoho předdefinovaných pomocných rutin značek pro běžné úlohy , jako jsou vytváření formulářů, odkazů, načítání prostředků a další – a ještě více dostupných ve veřejných úložištích GitHubu a jako balíčky NuGet. Pomocné rutiny značek jsou vytvořené v jazyce C# a cílí na elementy HTML na základě názvu elementu, názvu atributu nebo nadřazené značky. Například integrovaný LinkTagHelper lze použít k vytvoření odkazu na Login akci AccountsControllerakce:

<p>
    Thank you for confirming your email.
    Please <a asp-controller="Account" asp-action="Login">Click here to Log in</a>.
</p>

EnvironmentTagHelper se použít k zahrnutí různých skriptů do zobrazení (například nezpracovaných nebo minifikovaných) v závislosti na prostředí modulu runtime, jako je vývoj, příprava nebo produkční prostředí:

<environment names="Development">
    <script src="~/lib/jquery/dist/jquery.js"></script>
</environment>
<environment names="Staging,Production">
    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.js"
            asp-fallback-src="~/lib/jquery/dist/jquery.js"
            asp-fallback-test="window.jQuery">
    </script>
</environment>

Pomocné rutiny značek poskytují prostředí pro vývoj vhodné pro HTML a bohaté prostředí IntelliSense pro vytváření html a Razor značek. Většina předdefinovaných pomocných rutin značek cílí na existující elementy HTML a poskytuje atributy na straně serveru pro element.

Zobrazit komponenty

Zobrazit komponenty umožňují zabalit logiku vykreslování a opakovaně ji používat v celé aplikaci. Podobají se částečným zobrazením, ale s přidruženou logikou.

Kompatibilita – verze

Tato SetCompatibilityVersion metoda umožňuje aplikaci vyjádřit výslovný souhlas nebo vyjádřit výslovný nesouhlas s potenciálně zásadními změnami chování zavedeným v ASP.NET Core MVC 2.1 nebo novějším.

Další informace najdete v tématu Verze kompatibility pro ASP.NET Core MVC.

Další prostředky