Category Archives: .NET Core

Aspektové programování (Metalama) [Lukáš Michl, Vzdělávací okénko, 26.3.2026]

Jak snížit objem kódu o 20 % bez psaní boilerplate? Aspektové programování s Metalama v .NET (C#).

  • Co je aspektové programování a proč ho použít
  • Jak Metalama funguje – transformace C# kódu přes Roslyn před kompilací (bez IL weaving)
  • Instalace: stačí jeden NuGet balíček
  • Logování metod a exception s parametry
  • Trim property, validace, INotifyPropertyChanged a další built-in aspekty
  • Introduce Dependency Injection bez ručního konstruktoru
  • LINQ dotazy nad zdrojovým kódem (LinqPad integrace)
  • Licencování ($10/měsíc), podpora v Rider vs. Visual Studio

Vzdělávací okénko prezentoval Lukáš Michl.

Jak vytvořit AI aplikaci od nuly [Tomáš Wagner, Vzdělávací okénko, 5.3.2026]

Záznam ze Vzdělávacího okénka HAVIT z 5. března 2026. Tomáš Wagner ukazuje, jak krok za krokem postavit AI aplikaci v .NET a C# – od nastavení AI služby přes napojení do aplikace až po pokročilejší funkce jako chat history, tools a strukturovaný výstup.

  • Nastavení AI služby v .NET – OpenAI, Ollama (OllamaSharp) a Microsoft.Extensions.AI
  • Jak napojit AI do .NET aplikace a komunikovat s LLM modely
  • Přepínání mezi AI providery (OpenAI, Anthropic, Google Gemini, Ollama) bez přepisování kódu
  • Chat history – uchování kontextu konverzace
  • System prompts, instructions a tools (function calling)
  • Strukturovaný výstup z AI do C# tříd

.NET Aspire Introduction [Martin Goffa, HAVIT Vzdělávací okénko, 12.2.2026]

Co je .NET Aspire a proč ho použít pro multiservice .NET aplikace? Orchestrace, telemetry a Service Discovery v praxi.

  • Co je .NET Aspire a co není (rozdíl oproti Kubernetes)
  • Stavební kameny: AppHost, Service Defaults, integrace a Dashboard
  • Orchestrace Docker kontejnerů bez ruční konfigurace
  • Service Discovery a centralizovaná konfigurace závislostí
  • Telemetry: logy, trasování a metriky v Aspire Dashboardu
  • Integrace Redis, PostgreSQL a RabbitMQ přes NuGet balíčky
  • Live ukázka na HAVIT Project Template s Blazorem

Vzdělávací okénko prezentoval Martin Goffa.

Minesweeping [Jiří Kanda, Vzdělávací okénko, 8.1.2026]

Proč selhávají .NET aplikace, i když děláte vše správně? Skutečné miny v knihovnách a frameworcích.

  • Co jsou „miny“ ve vývoji softwaru – neočekávané problémy pramenící z dobrých úmyslů
  • Jak knihovny a frameworky způsobují neočekávané chování, výkonnostní problémy a pomalé buildy
  • Skutečné případy min z praxe .NET projektů
  • Jak miny odhalit, diagnostikovat a jak se jim vyhnout

Vzdělávací okénko prezentoval Jiří Kanda.

Integrační testy konečně správně (Testcontainers) [Ondřej Václavek, Vzdělávací okénko, 11.12.2025]

Jak psát integrační testy v .NET správně? Testcontainers spustí reálný SQL Server z Dockeru přímo z C# testovacího kódu.

  • Rozdíl mezi integračními a unit testy – kde mockování nestačí
  • Proč jsou integrační testy v CI/CD pipeline problematické a jak to řeší Docker
  • Testcontainers – NuGet balíček pro spouštění Docker kontejnerů z C#
  • Integrace s ASP.NET Core přes WebApplicationFactory
  • Izolovaná databáze per test + fast restore (řádově 100 ms)
  • Paralelní spouštění testů bez vzájemného ovlivňování
  • Podpora více kontejnerů a Docker Compose
  • Reálná ukázka nasazení z projektu Edenred

Vzdělávací okénko prezentoval Ondřej Václavek.

O signaturách metod a DTO a jak je psát [Lukáš Michl, Vzdělávací okénko, 4.12.2025]

Záznam ze Vzdělávacího okénka HAVIT, kde Lukáš Michl povídal o tom, jak psát signatury metod a DTO tak, aby byl kód srozumitelný bez nutnosti číst implementaci. Přednáška pokrývá antipattern primitive type obsession, strong type values, knihovnu Vogen a best practices pro DTO.

Proč záleží na čitelných signaturách

Dobrá signatura metody prozradí, co metoda dělá, aniž by bylo nutné číst její tělo. To je klíčové pro udržovatelnost – kód se k němu vrací za dny, týdny i roky, a čím méně překvapení signatura skrývá, tím méně chyb při refaktorování vzniká. Lukáš ukazuje sérii příkladů z reálných projektů, kde nejasné signatury vedly k neočekávanému chování.

Primitive type obsession antipattern

Používání primitivních typů (string, int) všude, kde by měl být byznysový typ, vede k nejasnostem: co přesně parametr string name očekává? Je to jméno ve formátu AD, nebo zobrazované jméno? Může být null? Může být prázdný? Tyto otázky se násobí pro každé volání metody. Podobný problém nastává u ID entit – pokud jsou UserID, LoginID i EntityID reprezentovány jako int, záměna při refaktorování neprojde kompilátorem a může tiše způsobit datovou chybu.

Nullable reference types

Zapnutí nullable reference types (#nullable enable) je prvním krokem ke čitelnějším signaturám – kompilátor okamžitě sdělí, zda parametr nebo návratová hodnota může být null. Samo o sobě to ale nestačí, pokud jsou parametry stále primitivní typy bez byznysového kontextu.

Strong type values a value objects

Řešením primitive type obsession jsou strong type values – vlastní typy obalující primitivní hodnotu a nesoucí byznysový kontext i validaci. Implementují se jako C# record struct, čímž se předchází dvojité alokaci na heapu. Validace v konstruktoru zajistí, že nevalidní hodnota vůbec nevznikne – testy kontraktu pak stačí napsat jednou u definice typu, ne u každého volání metody.

Knihovna Vogen

Vogen je source-generátorová knihovna, která automaticky generuje plnohodnotné strong-typed hodnoty – včetně serializace JSON, podpory Entity Framework a možnosti přidávat validace. Bez ní by bylo ruční psaní pro stovky byznysových typů v projektu neúnosné; s Vogen stačí jedna řádka atributu nad definicí.

Strong Typed ID

Specifickým případem jsou ID entit. Knihovna StronglyTypedId řeší záměnu identifikátorů různých entit na úrovni typového systému – kompilátor odmítne předat UserId tam, kde se očekává OrderId.

DTO best practices

Suffix DTO v názvu třídy je kontrakt: objekt by měl být immutable a sloužit výhradně k přenosu dat. Lukáš doporučuje vlastnosti deklarovat s required init – přidání nové vlastnosti pak okamžitě způsobí chybu kompilace u všech míst, kde se DTO inicializuje, a zabrání tiché inicializaci výchozími hodnotami. Kombinace s konstruktorovým zápisem navíc zajistí, že kolega přistupující ke kódu poprvé okamžitě vidí, co všechno DTO nese.

Novinky v .NET 10 a výhled na .NET 11 [WUG Dev Day Praha, 26.1.2026]

Záznam z přednášky pro konferenci WUG Dev Day Praha z 26. ledna 2026.

Co se dozvíte

  • .NET 10/11 timeline – STS prodlouženo na 2 roky, LTS na 3 roky
  • C# 14 – extension members: nová syntaxe s klíčovým slovem extension
  • C# 14 – klíčové slovo field v getter/setter, null conditional assignment (?=)
  • C# 14 – partial constructors/events, user-defined compound assignment operátory
  • .NET 10 Runtime – JIT devirtualizace, deabstrakce a výkonové optimalizace
  • BCL – string comparer s numeric ordering, LINQ left/right join, WebSocket stream
  • System.Text.Json – cyclic references v source generators, strict preset
  • SDK – dotnet tool exec, file-based apps (jednořádkové C# scripty), package pruning
  • ASP.NET Core – OpenAPI 3.1, validace na Minimal API, ochrana před open redirect
  • Blazor – přehled nejvýraznějších novinek v .NET 10
  • Výhled na .NET 11 a C# 15

Slides

PDF v .NET pomocí PDFSharp/MigraDoc [T. Wagner, Z. Hlinka, Vzdělávací okénko, 2.10.2025]

Záznam ze Vzdělávacího okénka z 2. října 2025. Tomáš a Zdeněk ukazovali bezplatné knihovny pro tvorbu PDF z .NET – PDFSharp a jeho nadstavbu MigraDoc.

Novinky v .NET 9 a výhled na .NET 10 – záznam a slides [Robert Haken, WUG Days Brno 9/2025]

Záznam z přednášky pro konferenci WUG Days Brno z 5.9.2025, kde jsem telegraficky představoval novinky z „.NET 9 vlny“ a pár přicházejících v „.NET 10 vlně“.

Slides

Novinky v C# 12, 13 a 14 (.NET 8, 9 a 10) – záznam [TechEd Praha 2025]

Přehled novinek C# 12 (.NET 8), C# 13 (.NET 9) a preview C# 14 (.NET 10) – praktické ukázky ve Visual Studiu.

  • C# 12: primary constructors – DI pattern, capture, naming konvence
  • C# 12: collection expressions, inline arrays, spread operátor
  • C# 12: type aliases, default lambda parametry, [Experimental] atribut, interceptory
  • C# 13: nová třída Lock – modernizované zamykání vláken s using
  • C# 13: params collections (Span, IEnumerable) a výkonové výhody
  • C# 13: partial properties, indexery a ref struct vylepšení
  • C# 14: extension members – extension bloky, properties, statické metody
  • C# 14: klíčové slovo field, null conditional assignment (?=), dictionary expressions

Přednáška zazněla na konferenci TechEd Praha 2025.