Vize: CodeGen jako Montážní Linka

CodeGen jako Montážní Linka pro Kompletní Funkce

Naše softwarová továrna, poháněná CodeGen nástrojem, překračuje hranice backendu. Jejím cílem je z jediné, deklarativní definice doménové entity automaticky sestavit celý vertikální řez aplikace – od databáze přes API až po plně funkční a interaktivní uživatelské rozhraní.

Tato vize stojí na třech pilířích: Backend-as-a-ServiceAPI-as-a-Contract a UI-as-an-Implementation-Detail.

Pilíř 1: Backend-as-a-Service (máme)

Pomocí atributů jako [GenerateDto][GenerateCrudHandlers] a [AuthorizeOperation] transformujeme doménovou entitu na plně funkční, zabezpečenou a robustní sadu API endpointů. CodeGen automaticky generuje:

  • DTO a mapování: Zajišťuje, že data tekoucí přes API jsou vždy konzistentní s doménou.
  • CQRS Handlery: Vytváří veškerou aplikační logiku pro CRUD operace.
  • Repozitáře a autorizaci: Buduje datovou vrstvu a vynucuje bezpečnostní pravidla.

Výsledkem je, že backend se stává službou, jejíž chování je plně definováno jednoduchými a čitelnými atributy.

Pilíř 2: API-as-a-Contract s pomocí Refitu (Další krok)

Problém: Jakmile máme API, klientská strana (Blazor) ho musí nějak konzumovat. Tradiční přístup psaní HttpClient volání je repetitivní, náchylný k chybám (překlepy v URL, zapomenuté headery) a neposkytuje typovou bezpečnost.

Naše řešení: Refit a jeho automatické generování. CodeGen rozšíříme o novou "stanici" na naší montážní lince.

[GenerateAllTheThings(PluralName = "Projects")]
// Přidáme nový atribut pro generování API klienta
[GenerateRefitClient]
public partial record Project { ... }

Co CodeGen udělá:

  1. Analyzuje API: Prozkoumá vygenerované CRUD handlery (nebo lépe, vygeneruje sdílené API rozhraní).
  2. Výsledek: Vývojář v Blazoru už nikdy nepíše httpClient.GetAsync("api/projects/..."). Místo toho si jednoduše vstříkne IProjectsApiClient a volá typově bezpečnou metodu _projectsApi.GetProjectAsync(id). API se stává pevným, strojově čitelným a generovaným kontraktem mezi backendem a frontendem.

Vygeneruje Refit Rozhraní: Vytvoří typově bezpečné C# rozhraní s Refit atributy, které přesně odpovídá našemu API. Tento soubor, např. IProjectsApiClient.g.cs, se uloží do TodoApp.Shared.

// Vygenerováno v TodoApp.Shared/ApiClients/IProjectsApiClient.g.cs
public interface IProjectsApiClient
{
   [Get("/api/projects/{id}")]
   Task<ProjectDto> GetProjectAsync(string id);

   [Post("/api/projects")]
   Task<ApiResponse<ProjectDto>> CreateProjectAsync([Body] ProjectCreateDto project);
   // ... atd. pro Update, Delete, GetAll
}

Pilíř 3: UI-as-an-Implementation-Detail s Blazorem (Finální cíl)

Problém: I s Refitem musíme stále ručně vytvářet Blazor komponenty – tabulky, formuláře, validační logiku. Je to ta poslední bašta repetitivní práce.

Naše řešení: CodeGen se stane i frontendovým vývojářem.

[GenerateAllTheThings(PluralName = "Projects")]
[GenerateRefitClient]
// Finální atribut, který spustí generování UI
[GenerateBlazorComponents]
public partial record Project 
{
   [Display(Name = "Název projektu")]
   [Required]
   public string Name { get; init; }
   // ...
}

Co CodeGen udělá:

  1. Analyzuje DTO a atributy: Podívá se na ProjectDtoProjectCreateDto a jejich vlastnosti, včetně atributů jako [Display][Required][StringLength].
  2. Vygeneruje Blazor Komponenty: Vytvoří sadu .razor a .razor.cs souborů a uloží je do TodoApp.Client/Pages/Generated/Projects/:
    • ProjectsList.razor: Stránka se zobrazením tabulky všech projektů. Automaticky použije IProjectsApiClient k načtení dat.
    • CreateProject.razor: Stránka s formulářem pro vytvoření nového projektu. Využije komponentu ProjectForm.
    • EditProject.razor: Stránka pro úpravu, která načte data a předá je do ProjectForm.
    • ProjectForm.razor: Znovupoužitelný formulář, který na základě vlastností DTO a [Display] atributů vygeneruje popisky (<label>) a editační prvky (<InputText><InputDate>).
    • ProjectTable.razor: Znovupoužitelná tabulka, která zobrazí data a tlačítka pro akce.
  3. Výsledek: UI se stává pouhým implementačním detailem doménového modelu. Vývojář se soustředí na definici dat a pravidel v entitě a CodeGen se postará o jejich kompletní vizualizaci a interakci.

Finální Vize v Jedné Větě

Na základě jediné, srozumitelné definice entity automaticky sestavíme kompletní, zabezpečenou a funkční byznys funkci, včetně datové vrstvy, API, typově bezpečného klienta a interaktivního uživatelského rozhraní.

Tím se posouváme od psaní kódu k navrhování systémů.

Subscribe to Blog

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe