Programování
MVC základy
Celá aplikace je rozdělena na komponenty 3 typů, hovoříme o Modelech,
View (pohledech) a Controllerech (kontrolerech), od toho MVC. Označení pohled
se budu snažit vyhýbat, protože mi přijde matoucí, že takto přeložené
nekoresponduje s označením V. Neexistuje žádná striktní definice
architektury a tak se můžete setkat s více výklady. My se zaměříme na ten
nejrozšířenější.
View není jen šablona, ale zobrazovač výstupu. Obsahuje tedy minimální množství logiky, která je pro výpis nutná (např. kontrola, zda si uživatel vyplnil přezdívku před jejím vypsáním nebo cyklus s komentáři, které se vypisují).
View podobně jako Model vůbec neví, odkud mu data přišla , stará se jen o jejich zobrazení uživateli.
Model
Model obsahuje logiku a vše, co do ní
spadá. Mohou to být výpočty, databázové dotazy, validace a podobně. Pro
nás to znamená, že modely jsou klasické C# třídy, jako jsme je znali
doposud. Model vůbec neví o výstupu. Jeho funkce spočívá
v přijetí parametrů zvenku a vydání dat ven. Zdůrazněme, že parametry
nemyslíme URL adresu ani žádné jiné parametry od uživatele, ale parametry
metod ve třídě modelu.Model neví, odkud data v parametrech přišla
a ani jak budou výstupní data zformátována a vypsána.
View
Pohled (View) se stará o zobrazení výstupu
uživateli
. Jedná se o HTML šablonu, obsahující
HTML stránku a tagy speciálního jazyka, který umožňuje do
šablony vkládat proměnné, případně provádět iterace (cykly) a
podmínky. Pohled Uzivatel.cshtml tedy vypíše detaily o
uživateli, pohled Clanek.cshtml vypíše obsah článku.
View není jen šablona, ale zobrazovač výstupu. Obsahuje tedy minimální množství logiky, která je pro výpis nutná (např. kontrola, zda si uživatel vyplnil přezdívku před jejím vypsáním nebo cyklus s komentáři, které se vypisují).
View podobně jako Model vůbec neví, odkud mu data přišla , stará se jen o jejich zobrazení uživateli.
Controller
Controller je nyní onen chybějící prvek, který osvětlí
funkčnost celého vzoru. Jedná se o jakéhosi prostředníka,
se kterým komunikuje uživatel, model i view. Drží tedy celý systém
pohromadě a komponenty propojuje. Jeho funkci pochopíme z
ukázky životního cyklu stránky. Nejčastěji má každá entita jeden
controller, máme tedy UzivatelController,
ClanekController a tak podobně.
Zpracování požadavku
Více informací: ItNetwork
Routování
Nejdříve jde jméno server, pak následně controler a pak dodatečné jméno akce
serverUrl/Controller/Action/
nebo je možnost přidat id?, která je ovšem dobrovolná
serverUrl/Controller/Action/id
serverUrl/Controller/Action/
nebo je možnost přidat id?, která je ovšem dobrovolná
serverUrl/Controller/Action/id
Http protokol
HTTP je internetový protokol používaný k přenosu souborů mezi serverem a tzv. klientem, kterým bývá nejčastěji webový prohlížeč, ale může jím být také třeba crawler vyhledávače.
HTTP také říká bezstavový protokol, protože funguje na principu dotaz → odpověď. Například kliknete na nějaký odkaz a váš prohlížeč zašle pomocí HTTP protokolu požadavek s příslušnou adresou na odpovídající server. Zároveň s tím pošle i tzv. HTTP hlavičku. Server následně, opět s pomocí HTTP protokolu, pošle zpět HTML soubor, společně se stavovým kódem a odlišnou HTTP hlavičkou odpovědi.
HTTP také říká bezstavový protokol, protože funguje na principu dotaz → odpověď. Například kliknete na nějaký odkaz a váš prohlížeč zašle pomocí HTTP protokolu požadavek s příslušnou adresou na odpovídající server. Zároveň s tím pošle i tzv. HTTP hlavičku. Server následně, opět s pomocí HTTP protokolu, pošle zpět HTML soubor, společně se stavovým kódem a odlišnou HTTP hlavičkou odpovědi.
Více informací: strafelda.cz
Controller
Controller odpovídá za odpovědi, které jsou poslané na server. Logiku do nich dáváme slabou, odkazujeme se na modely a další třídy, které si vytvoříme. Vytváříme je pomocí Přidat > Controller > prázdný controller
Akce (metody) v controlleru
Vytvářime metody, který vracejí zpět IActionResult, který muže vrátit hodně věcí, jelikož je to interface. Možné příklady jsou:
- View(string? viewName)
Vraci View se stejným jménem jako je akce, pokud ovšem do parametrů napíšeme jiné jméno, tak zobrazí jiný view - RedirectToAction(string jmenoAkce)
Zavolá to jinou metodu uvnitř toho controlleru - Redirect(string urlcesta)
Zavola to tam kam napíeme v cestě, muže kamkoliv avšak musime psát přesně - JSON(object toconaJSON)
Vraci html view, ale jsou tam jen informace o objektu co jsme vložily
public class HomeController : Controller
{
// localhost/Home/Get?pocet=5&jmeno=Pavel
public IActionResult Get(int pocet, string jmeno)
{
/*Dostaneme
pocet = 5
jmeno = "Pavel"
*/
return View();
}
// localhost/Home/Get/5
public IActionResult GetCar(int id)
{
/*Dostaneme
id = 5
Tohle platí, protože int id je nepovinný attribut
*/
return View();
}
// localhost/Home/Get?id=10
public IActionResult GetHumans(int id)
{
/*Dostaneme
id = 10
Tohle platí, protože int id je attribut
*/
return View();
}
}