Přejít na hlavní obsah
Naše technologie: silné typování obsahu v .NET (4. díl)

Naše technologie: silné typování obsahu v .NET (4. díl)

Chcete poznat technologie, se kterými v Kentico pracujeme? Přeložili jsme pro vás na ukázku malou sérii článků vztahující se k jednomu z našich open source projektů. Bude řeč o silném typování v Kentico Cloud Delivery .NET SDK. Ve čtvrtém díle si povíme o typování za běhu. 

Možná už znáte koncept tzv. headless CMS systémů, jako je náš produkt Kentico Cloud. Možná také víte, že weby a aplikace v .NET mohou využívat obsah z Kentico Cloud zasazený do tzv. silně typovaných modelů. Ukažme si výhody a způsob použití silných typů z našeho Delivery .NET SDK. Na co se můžete těšit? 

Obyčejné silné typování nemusí stačit

Z minulých dílů si nejspíš pamatujete, že obyčejné silné typování při načítání položek obsahu (content items) z Kentico Cloud nemusí stačit. Proč to tak je a jaké řešení jsme vymysleli, to se dozvíte právě v tomto článku.

Stručně řečeno – automatické typování za běhu jsme implementovali hlavně kvůli ASP.NET MVC. Kdysi dávno, v roce 2009, přineslo ASP.NET MVC 2 novou funkci zvanou Display templates (a Editor templates, abychom byli přesní). Podrobně ji tehdy popsal jeden z hlavních autorů MVC v sérii článků, stručný popis jsme nedávno publikovali i my na DevNetu.

Jednoduchá, ale robustní funkce

Templates umožňují vývojáři definovat HTML snippety pro CLR typy používané v aplikaci. Snippety mají podobu běžných Razor souborů (.cshtml) pojmenovaných na základě jmenné konvence podle jejich příslušného CLR typu. Kdykoli se pak typy pokryté definovanými templates objeví ve viewmodelu, MVC automaticky vykreslí dané HTML. Template samozřejmě můžete určit i výslovně (ne jmennou konvenci).

Templates excelují v situacích, kdy MVC aplikace ve své datové vrstvě má z repozitáře získávat model, který nemá pokaždé stejnou strukturu. Pokud je vždy jinak vnitřně uspořádaný, z objektů různých typů, je nejlepší spolehnout se na templates.

Templates mají své limity

Jak zajistit, aby se MVC dozvědělo, jaké objekty jakých typů se v modelu nacházejí? Vždyť i při použití silného typování můžeme z Delivery SDK získat pouze objekty typů definovaných v čase kompilace. Pro získání obsahu s předem neznámým složením nemůžete zavolat běžně GetItemsAsync<T>:

Kromě toho, existují ještě i jiné situace, kdy není možné určit složení modelu dopředu v kódu – při získávání položek s modulárním obsahem. Modulárním obsahem nazýváme položky obsahu, které uživatel vložil do jiné (mateřské) položky obsahu. Uživatelé takto mohou do mateřské položky agregovat položky různých typů podle potřeby. Jako příklad můžeme použít fiktivní položku typu Article, která může obsahovat položky typů Comment, Review aj.:

Objekty v property ModularContentField mohou mít libovolný CLR typ.

Za této situace nejsme schopni prostřednictvím kódu MVC aplikace předem sdělit, jaké typy budou v modelech. MVC z typu object tím pádem nepozná, jakou template má vykreslit. Co teď?

Co se stane, když zkusíme dynamic?    

Dynamic byl skvělý přírůstek do jinak staticky typovaného světa .NET. Můžete deklarovat property jako typ dynamic bez nutnosti předpokládat (či dokonce definovat) typy, které property může za běhu mít. Původně jsme chtěli jako řešení našeho problému použít právě dynamic. Jenže, DLR za běhu property zasadí do anonymního typu, ne do pojmenovaného:

(Rozdíl spočívá v kolekci ModularContentField. Položky v kolekci namají žádné kvalifikátory typů.)

Anonymní objekty vytvořené pomocí dynamic nám taky nepomůžou.

Přišli jsme s řešením

Aniž bychom teď zabíhali do podrobností, přišli jsme se způsobem, který zajistí, že se v modelu mohou objevit data různých typů a navíc pokaždé řádně pojmenovaných typů. Stačí, abyste při volání GetItemsAsync<T> jako typový parametr nastavili object, ne konkrétní typ:

Odteď může MVC samo vykreslovat HTML z templates pojmenovaných podle názvů typů. Uživatelé v Kentico Cloud mohou skládat položky obsahu z předem neznámého počtu položek libovolných typů obsahu. Jakmile definujete pro každý typ alespoň jednu template, bude MVC aplikace vždy schopna vykreslit složenou položku obsahu. Příště si ukážeme podrobnosti.

Templates v MVC jsou skvělá funkce. A proto nám stálo za to implementovat pro ně automatické typování za běhu. Nebylo to úplně jednoduché, ale takoví jsme my.

Jste taky takoví? Dejte nám vědět, třeba na fórech, v GitHubu (formou issue nebo třeba pull requestu), nebo se ozvěte našim milým kolegyním z HR!

O všech plánovaných akcích píšeme také na Facebooku. Sledujte nás, ať vám žádná neuteče.

Chcete si číst dál?

Myslíme na rodinu

Se 101 dětmi a spoustou zajímavých koníčků je pro nás work-life balance zásadní téma. Jak na to v Kentico jdeme?

V kategoriích Život v Kentico, Benefity a Video

Rozhovor z útrob Chytré karantény

Tomáš Jurásek z Kentico pracuje na aplikaci Poloha pro hygienu v rámci Chytré karantény od začátku. Jak celý proces a samotné aplikace fungují? Jaké projekty dobrovolníci rozjeli v rámci iniciativy CO…

V kategoriích Život v Kentico, Development a Rozhovory

Jakou má roli UX ve směřování produktu a firmy

Taky máte pocit, že se z UX stal tak trochu buzzword? K čemu ho vlastně potřebujeme a jak ho ve firmě vnímáme? Svoje postřehy sepsal Petr Augustin!

V kategorii UX