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-Service, API-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á:
- Analyzuje API: Prozkoumá vygenerované CRUD handlery (nebo lépe, vygeneruje sdílené API rozhraní).
- Výsledek: Vývojář v Blazoru už nikdy nepíše
httpClient.GetAsync("api/projects/..."). Místo toho si jednoduše vstříkneIProjectsApiClienta 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á:
- Analyzuje DTO a atributy: Podívá se na
ProjectDto,ProjectCreateDtoa jejich vlastnosti, včetně atributů jako[Display],[Required],[StringLength]. - Vygeneruje Blazor Komponenty: Vytvoří sadu
.razora.razor.cssouborů a uloží je doTodoApp.Client/Pages/Generated/Projects/:ProjectsList.razor: Stránka se zobrazením tabulky všech projektů. Automaticky použijeIProjectsApiClientk načtení dat.CreateProject.razor: Stránka s formulářem pro vytvoření nového projektu. Využije komponentuProjectForm.EditProject.razor: Stránka pro úpravu, která načte data a předá je doProjectForm.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.
- 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
CodeGense 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ů.