Naše technologie: silné typování obsahu v .NET (1. díl)
Práce v Kentico, Produkty

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

Chcete poznat technologie, se kterými v Kentico pracujeme? Přeložili jsme pro vás sérii článků, které se týkají jednoho z našich open source projektů. Bude řeč o silném typování obsahu získaného prostřednictvím Kentico Kontent Delivery .NET SDK. V tomto díle se podíváme na výhody a na generátor kódu. 

Možná už znáte koncept tzv. headless CMS systémů a náš produkt Kentico Kontent.
Možná také víte, že weby a aplikace v .NET mohou využívat obsah z Kentico Kontent zasazený do tzv. silně typovaných modelů. Tedy že každá položka obsahu (content item) má svůj předem známý typ (např. "Článek", "Blogpost", "Produkt" atd.). Ukážu vám výhody a způsob použití silných typů z našeho Delivery .NET SDK. Na co se můžete těšit? 

Proč vlastně silné typování

S obsahem uloženým v Kentico Kontent můžete v .NET aplikacích pracovat prostřednictvím Delivery .NET SDK. Ve své aplikaci jednoduše přidáte referenci na NuGet balíček našeho SDK a můžete začít využívat jeho metody pro přístup k obsahu. Nedávno jsme výrazně usnadnili práci s obsahem tím, že jsme implementovali silné typování a automatické typování za běhu.

V .NET je nanejvýš žádoucí mít informace zasazené do silných typů. Proč?

  • Kód přesně ví, jaké vlastnosti má daný typ položek obsahu (content item) z Kentico Kontent. Tedy že např. blogpost má vždy svůj nadpis, úvod, titulní obrázek a datum publikace.
  • Je možné používat generické kolekce.
  • Většinu banálních chyb je možné odhalit během psaní kódu nebo při kompilaci.
  • IntelliSense nabízí při psaní kódu vlastnosti a metody daného typu.
  • A mnoho dalšího.

Největší radost vývojářům udělají i silné typy v ASP.NET MVC. Proč?

Donedávna v SDK každý typ obsahu (content type) z Kentico Kontent reprezentoval jen jediný typ – ContentItem. Teď už můžete mít pro každý svůj typ obsahu odpovídající CLR typ. Pojďme si tedy ukázat, jak CLR typy (Common Language Runtime types) vygenerovat a využít.

Generátor typů snadno a rychle

K čemu by bylo silné typování, kdybychom nutili vývojáře psát kód CLR typů ručně? K ničemu. Proto nechme práci strojům a generujme typy bleskově z příkazové řádky!

Náš generátor typů nemá podobu konzolové aplikace náhodou. Díky tomu se dá pustit i jako pre-build event Visual Studia nebo jako jeden z kroků v rámci celého procesu continuous integration/delivery.

Generátor je – stejně jako všechna naše SDK – open source projekt hostovaný v GitHubu. Stačí stáhnout .exe soubor a spustit:

CloudModelGenerator.exe --projectid "<projectid>" [--namespace "<custom-namespace>"] [--outputdir "<output-directory>"] [--withtypeprovider]

Toto je konkrétní příklad použití z naší ukázkové MVC aplikace:

CloudModelGenerator.exe --projectid "975bf280-fd91-488c-994c-2f04416e5ee3" --namespace "DancingGoat.Models" --outputdir "C:\Users\jan.lenoch\Source\Repos\cloud-sample-app-net\DancingGoat\Models\ContentTypes" --withtypeprovider

Příkaz vygeneroval následující výstup:

silné typování v .NET
silné typování v .NET 2

Utilita se na pozadí vždy připojí k veřejnému API endpointu pro typy obsahu, načte jejich názvy, kódové názvy, elementy, jejich typy atd. Pro každý typ vygeneruje soubor s třídou. Použití utility je jednoduché; nevyžaduje ani žádné přihlašování. Endpoint je totiž veřejně dostupný.

Jaké typy se generují

Následující tabulka obsahuje druhy elementů v našich typech obsahu a typy pro properties CLR typů vytvořených generátorem.

Textstring
Rich textstring
Numberdecimal?
Multiple choiceIEnumerable<MultipleChoiceOption>
Date & timeDateTime?
AssetIEnumerable<Asset>
Modular contentIEnumerable<object>
TaxonomyIEnumerable<TaxonomyTerm>
URL slugstring

Generátor vytváří všechny třídy jako partial. Pokud je rozšíříte pomocí nových, samostatných souborů, můžete bezstarostně přegenerovat původní soubory kdykoli znovu. Nepřijdete o žádné své úpravy.

Type provider

S volbou --withtypeprovider vyrobí generátor navíc ještě soubor CustomTypeProvider.cs, který propojí (namapuje) kódové názvy typů obsahu Kentico Kontent k vašim vygenerovaným CLR typům:

switch (contentType)
{
    case "about_us":
        return typeof(AboutUs);
    case "accessory":
        return typeof(Accessory);
    // …
}

Proč? Díky tomu můžete tuto jednoduchou logiku nahradit svou vlastní.

Pokud například několik typů obsahu v Kentico Kontent má podobnou strukturu a v .NET aplikaci není potřeba mít pro jejich typy pokaždé svou vlastní třídu, je možné si ušetřit práci a sloučit vše do jedné třídy. Docílíte toho tak, že takto podobné typy obsahu pojmenujete vždy s přídomkem (např. "Aggregated") a všechny je přesměrujete do jednoho kódu:

if (contentType.StartsWith("Aggregated"))
{
    return typeof(SomeAggregateType)
}

Možností při psaní vlastního type provideru je pochopitelně mnohem více.

Volba --withtypeprovider je nepovinná. Pokud ji nevyužijete a soubor CustomTypeProvider.cs nevygenerujete, Delivery .NET SDK bude automaticky párovat typy na základě jmenné konvence PascalCase. Soubor bude ale zapotřebí generovat, pokud budete chtít využívat jinou chytrou věc: automatické typování za běhu. O té si povíme ve čtvrtém dílu série.

Sečteno a podtrženo: žádná zbytečná práce

V tomto dílu jsme si ukázali, že silné typování otevírá vývojářům dveře ke všem radostem světa .NET. Generátor pak navíc umožňuje rychle (pře)generovat třídy pro typy obsahu. 

Máte rádi .NET a open source?

Pokud ano, můžete si Delivery .NET SDK nejen vyzkoušet, ale třeba i přispět svými postřehy:

  • Otázkou na fórech, nebo naopak odpovědí
  • Krátkým wiki článkem na GitHubu
  • Nahlášením chyby nebo její opravou prostřednictvím pull requestu

Možností máme mnoho. Pojďme spolu vytvářet nejlepší headless CMS v cloudu!

Autor

Jan Lenoch

Developer Trainer

Zajímá vás, jak to u nás chodí, a chcete vědět všechno mezi prvními? Sledujte nás na Facebooku, LinkedIn nebo Instagramu.

Další podobné články

Jak se žije .NET developerům v Kentico – část I

Představujeme vám .NET brainiaky, Aleše z Kontentu a Marka z Kentico Xperience. Povídali jsme si o rozdílech v developmentu a jejich týmech. A taky o tom, jak oni sami pomáhají ...

Chci vědět víc

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

Chcete poznat technologie, se kterými v Kentico pracujeme? Přeložili jsme pro vás na ukázku sérii článků vztahující se k jednomu z našich open source projektů. Bude řeč o silném...

Chci vědět víc

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

Chcete poznat technologie, se kterými v Kentico pracujeme? Přeložili jsme pro vás sérii článků, které se týkají jednoho z našich open source projektů. Bude řeč o silném typování...

Chci vědět víc