Erstellen von Webanwendungen
Ein Projekt besteht selten nur aus dem Backend. Mit Lino ist es auch möglich, Webanwendungen zu erstellen, um die generierten APIs zu nutzen und Schnittstellen fĂŒr Endbenutzer oder interne Teams bereitzustellen.
Derzeit unterstĂŒtzt das Framework nativ die Blazor Web App (Rendering-Modus). interactive auto).
Die Architektur wurde jedoch so konzipiert, dass mehrere Frontends zu derselben Lösung hinzugefĂŒgt werden können, um unterschiedliche Szenarien und Zielgruppen abzudecken.
Frontend-Architektur mit Blazor Web App
Von Lino generierte Webanwendungen verbinden Benutzer ĂŒber eine echte Schnittstelle mit Backend-AnwendungsfĂ€llen, nicht nur ĂŒber Aufrufe an API-Tools. Der aktuelle native Frontend-Typ ist Blazor Web-App, vorbereitet fĂŒr Verwaltungsanwendungen, öffentliche Portale, Backoffices, Partnerbereiche und domĂ€nenspezifische Schnittstellen.
lino web-app new --name <WebAppName>
Der Befehl muss innerhalb eines Lino-Projekts ausgefĂŒhrt werden. Es fordert den Namen der Web App an, verwendet die Blazor Web App-Vorlage, bestĂ€tigt die ausgewĂ€hlten Daten, erstellt die erforderlichen Dateien und fĂŒhrt die Befehle aus, die das Frontend mit der Lösung verbinden.
Die kanonische Form ist web-app. Die Aliase webapp Und web FĂŒr die ProduktivitĂ€t gibt es solche, aber Dokumentation und Beispiele sollten den Vorzug geben lino web-app new um die Konsistenz aufrechtzuerhalten.
Was wird generiert
Eine von Lino generierte Blazor Web App ist nicht nur ein loser Ordner mit OberflÀchen. Sie wird Teil derselben .NET-Lösung und folgt der modularen Organisation des Backends, wobei Verantwortlichkeiten zwischen Host, Client, gemeinsamen Komponenten und UI-Projekten pro Dienst oder Modul getrennt werden.
- Serverprojekt: Hostet die Blazor-Web-App, ordnet die Stammkomponenten zu, konfiguriert Dienststandards, statische Assets, FĂ€lschungsschutz, HTTPS-, MudBlazor-Dienste und interaktive Rendering-Modi.
- Client-Projekt: Konzentriert Komponenten, die auf der WebAssembly-Seite ausgefĂŒhrt werden, Routing, Layout, MenĂŒstruktur, Browsereinstellungen, Lokalisierungsfunktionen und Integration mit MudBlazor.
- Geteiltes WebApps-Projekt: Zentralisiert allgemeine UI-Ressourcen, Benachrichtigungen, Dialoge, Abfragezeichenfolgenvorlagen, Clientergebnisse, Kultur-/Zeitzonendienste und wiederverwendbare Komponenten.
- UI-Projekte pro Dienst und Modul: Wenn die Lösung ĂŒber Dienste und Module verfĂŒgt, erstellt Lino Frontend-Projekte innerhalb des Web-App-Frameworks, um kontextisolierte Seiten, MenĂŒs und Ressourcen zu verwalten.
Die generierten Host-Register AddInteractiveServerComponents Und AddInteractiveWebAssemblyComponents.
Die Stammkomponenten HeadOutlet Und Routes verwenden InteractiveAutoDadurch kann die Anwendung mit InteraktivitĂ€t ĂŒber den Server starten und zu WebAssembly migrieren, wenn die Client-Laufzeit verfĂŒgbar ist.
Integration mit Backend APIs
Wenn eine Web-App vorhanden ist, hĂ€lt Lino das Backend fĂŒr die typisierte Nutzung durch das Frontend bereit.
Dienste und Module können Projekte erhalten Api.Contracts Und Api.Client, wodurch Anforderungs-/AntwortvertrÀge und typisierte Clients den generierten Endpunkten zugÀnglich gemacht werden.
- Die BenutzeroberflĂ€che muss rohe HTTP-Aufrufe nicht fĂŒr jede FunktionalitĂ€t manuell zusammenstellen.
- Generierte Seiten rufen typisierte API-Clients auf und arbeiten mit Anforderungs- und Antwortmodellen, die zusammen mit dem Backend erstellt wurden.
-
Modelle geteilt als
ClientResult,QueryParamsUndPagedQueryParamsStandardisieren Sie die Ergebnisverarbeitung, Filter, Paginierung und visuelles Feedback. -
Die Integration ĂŒber einen typisierten
HttpClienthÀlt das Frontend an VertrÀgen, Berechtigungen, Validierungsnachrichten und Kulturen ausgerichtet, die vom Rest der Lösung verwendet werden.
Der praktische Ablauf ist:
Blazor-Seite -> typisierter API-Client -> Minimal-API-Endpunkt -> Command/Query -> Datenbank
Dieser Pfad gewÀhrleistet die Konsistenz des gesamten Stapels: Das DomÀnenmodell, die AnwendungsfÀlle, Endpunkte, VertrÀge, die lokalisierte Schnittstelle, die Navigation und die Berechtigungen folgen denselben Projektkonventionen.
UI-Funktionen enthalten
Die generierte Web App ist bereits auf die gÀngigen Belange realer Anwendungen vorbereitet:
-
Komponentenrouting
Routes.razorgeneriert. - Layout, Navigation und visuelle Komponenten basierend auf MudBlazor.
- Generierung von MenĂŒs aus den in jedem Dienst oder Modul verfĂŒgbaren Seiten.
-
.resx-Dateien zur Lokalisierung von Texten in den im Projekt konfigurierten Kulturen. - UnterstĂŒtzt Authentifizierung, Tokenspeicherung, geschĂŒtzte Routen und Berechtigungsdienste, wenn die Authentifizierungsfunktion aktiviert ist.
- BerechtigungsabhĂ€ngige MenĂŒs, die EintrĂ€ge nur anzeigen, wenn der aktuelle Benutzer ĂŒber die erforderliche Berechtigung verfĂŒgt.
Mehrere Frontends
Ein einzelnes Backend kann mehr als eine Web-App unterstĂŒtzen. Dies ist nĂŒtzlich, wenn unterschiedliche Zielgruppen unterschiedliche Navigation, Sicherheit, Erfahrung und Bereitstellung benötigen, aber weiterhin dieselben Dienste, Module, AnwendungsfĂ€lle und APIs nutzen mĂŒssen.
- Ăffentliche Website: Seiten, die fĂŒr Kunden, Besucher oder Benutzer zugĂ€nglich sind, die noch nicht authentifiziert sind.
- Backoffice/Admin: Internes Managementpanel fĂŒr Bediener, Support- und Verwaltungsteams.
- Partnerportal: EingeschrĂ€nkter Zugriff fĂŒr Partner, WiederverkĂ€ufer, Lieferanten oder betriebliche Integrationen.
- Selbstbedienungsbereich: Endkundenorientiertes Erlebnis mit eigenen MenĂŒs und Berechtigungen.
Jedes Frontend kann mit seinen eigenen Layouts, Ressourcen, MenĂŒs und Zugriffsregeln weiterentwickelt werden, wĂ€hrend das Backend nach Diensten, Modulen, AnwendungsfĂ€llen und VertrĂ€gen organisiert bleibt.
Erzeugen von Webseiten
Nach der Modellierung der EntitÀt, der Definition der AnwendungsfÀlle und der Generierung von Befehlen, Abfragen, Endpunkten und Persistenz besteht der nÀchste Schritt normalerweise darin, die FunktionalitÀt in der Schnittstelle bereitzustellen. Lino automatisiert diesen Schritt mit dem Seitengenerator:
lino page new --service <ServiceName> --module <ModuleName> --entity <EntityName> --webapp <WebAppName> lino page edit --service <ServiceName> --module <ModuleName> --entity <EntityName> --webapp <WebAppName> lino page list --service <ServiceName> --module <ModuleName> --entity <EntityName> --webapp <WebAppName>
Optionen können auch interaktiv informiert werden. Der Befehl fragt nach dem Dienst, dem Modul, der EntitĂ€t, der Ziel-Webanwendung, dem Seitentyp und den Eigenschaften, die im Raster angezeigt werden sollen. Der hĂ€ufigste Typ ist CRUD; Wenn die EntitĂ€t nur Abfragen unterstĂŒtzt, kann Lino eine Seite wie generieren DataGrid.
Verwenden page new um die erste Version des Bildschirms zu erstellen, page edit wenn die Seite Ănderungen an Feldern, VertrĂ€gen oder Verhalten verfolgen muss und page list um zu verstehen, was bereits fĂŒr eine EntitĂ€t generiert wurde.
Empfohlener Durchfluss
-
Erstellen oder wÀhlen Sie die Web-App mit aus
lino web-app new. - Modellieren Sie die EntitÀt und generieren Sie AnwendungsfÀlle, Abfragen, Befehle, Endpunkte, API-VertrÀge und Persistenzartefakte.
-
Laufen
lino page newund wÀhlen Sie die EntitÀt aus, die die Schnittstelle erhalten soll. - WÀhlen Sie die Felder im Raster sorgfÀltig aus. Sie werden zu sichtbaren Spalten und helfen beim Einrichten von Abfrageparametern, Filtern und Paginierung.
- FĂŒhren Sie die Lösung ĂŒber AppHost aus, um UI, APIs, Authentifizierung, Berechtigungen und Datenbankintegration gemeinsam zu validieren.
Generierte Struktur
FĂŒr eine CRUD-Seite erstellt Lino ein vollstĂ€ndiges Blazor-Seitenpaket anstelle einer einzelnen Razor-Datei:
- Datensatzseite oder Index zur Koordinierung der Auflistung, Erstellung, Bearbeitung, Details und Löschung.
- Rasterkomponente basierend auf MudBlazor, mit serverseitigem Laden, Paginierung, Filtern und Zuordnung fĂŒr Abfrageparameter.
- Formularkomponente mit typisiertem ViewModel und Erweiterungen zum Zuordnen von Erstellungs-, Aktualisierungs- und Get-by-ID-Anfragen.
- Ressourcen fĂŒr Titel, Beschriftungen, SchaltflĂ€chen, Validierungsmeldungen und lokalisierte Schnittstellentexte.
- BerechtigungsprĂŒfungen, wenn die Authentifizierung aktiviert ist, einschlieĂlich Seitenzugriffsvalidierung und bedingte SchaltflĂ€chen.
Erstellen einer CRUD-Seite fĂŒr die EntitĂ€t Vehicle, zum Beispiel im Dienst Fleet, Modul Operations und Web-App Backoffice, die Struktur folgt diesem Format:
src/WebApps/Backoffice/Services/Fleet/Operations/Pages/Vehicles/Registration/
âââ Vehicle.razor
âââ Vehicle.razor.cs
âââ Resources/
â âââ VehicleResources.resx
â âââ VehicleResources.Designer.cs
âââ Components/
âââ Form/
â âââ VehicleForm.razor
â âââ VehicleForm.razor.cs
â âââ VehicleFormExtensions.cs
â âââ VehicleViewModel.cs
â âââ Resources/
â âââ VehicleFormResources.resx
â âââ VehicleFormResources.Designer.cs
âââ Grid/
âââ VehicleGrid.razor
âââ VehicleGrid.razor.cs
âââ VehicleGridExtensions.cs
âââ VehiclePagedQueryParams.cs
âââ Resources/
âââ VehicleGridResources.resx
âââ VehicleGridResources.Designer.cs
Die Idee behÀlt die vorherige Struktur bei, die in Beispielen wie verwendet wurde Order: Hauptseite, Code-Behind, Formularkomponenten, Rasterkomponenten, Erweiterungen und paginierte Parameter.
Die aktuelle Version fĂŒgt Funktionen und eine explizite Integration in die Organisation nach Web-App, Dienst und Modul hinzu.
So funktioniert die generierte Seite
Die Seite verwendet dieselben VertrĂ€ge, die fĂŒr API generiert wurden. Das Raster wandelt Filter und Paginierung in eine Auflistungsanfrage um; Das Formular wandelt das ViewModel in Erstellungs- oder Aktualisierungsanforderungen um. Der typisierte API-Client sendet den Anruf an den entsprechenden Endpunkt. Der Endpunkt fĂŒhrt den generierten Befehl oder die generierte Abfrage aus und gibt eine typisierte Antwort an die BenutzeroberflĂ€che zurĂŒck.
Frontend -> API -> Commands/Queries -> Datenbank
Bei vorhandener Berechtigung prĂŒft der generierte Code auch Berechtigungen wie Auflisten, Erstellen, Bearbeiten, Löschen und Abfragen nach Identifikator. Dies betrifft sowohl den Zugriff auf die Seite als auch die Sichtbarkeit von Aktionen fĂŒr den Benutzer.
Das Ergebnis ist ein konsistenter Full-Stack-Ablauf: DomĂ€nenmodell, Anwendungsfall, Endpunkt, typisierter Client, lokalisierte BenutzeroberflĂ€che, Navigation und Berechtigungen folgen denselben Designkonventionen. Der Generator reduziert Wiederholungen, aber Komponenten bleiben fĂŒr Produktanpassungen, Benutzerfreundlichkeit und spezifische Regeln bearbeitbar.
Mehrsprachige BenutzeroberflÀche
Von Lino generierte Webanwendungen verwenden Dateien .resx fĂŒr lokalisierte Texte.
Dadurch können Sie die gleiche Razor-Struktur beibehalten und Titel, Beschriftungen, SchaltflÀchen, Fehlermeldungen, Validierungstexte und Beschreibungen je nach aktiver Kultur variieren.
Der Standort sollte nicht als optischer Abschluss betrachtet werden. Auf Verwaltungsseiten und Betriebsportalen wecken inkonsistente Begriffe Zweifel an der GeschĂ€ftsregel. Daher sind Ressourcen Teil der UI-Architektur und mĂŒssen Seiten, Formulare, Raster und gemeinsam genutzte Komponenten begleiten.
- Halten Sie die Tasten stabil, beschreibend und bedeutungsorientiert und vermeiden Sie Namen, die an das temporÀre Bildschirmlayout gebunden sind.
- Vermeiden Sie fest codierten Text auf Seiten und Komponenten; Verwenden Sie Ressourcen fĂŒr Beschriftungen, Nachrichten, Titel, Breadcrumbs, MenĂŒs und BestĂ€tigungen.
- ĂberprĂŒfen Sie die technischen Begriffe, um die Konsistenz zwischen Dokumentation, CLI-, API-VertrĂ€gen und Schnittstelle zu gewĂ€hrleisten.
- Behalten Sie kulturĂŒbergreifend den gleichen SchlĂŒsselsatz bei, um unerwartete RĂŒckschlĂ€ge oder teilweise ĂŒbersetzte Bildschirme zu verhindern.
- Trennen Sie die wörtliche Ăbersetzung von der Produktanpassung: Wenn ein Begriff fĂŒr den Endbenutzer lokalisiert werden muss, behalten Sie die funktionale Bedeutung der Aktion bei.
Auf generierten Seiten gibt es normalerweise Ressourcen auf Seiten-, Formular- und Rasterebene. Diese Trennung ermöglicht die Weiterentwicklung jedes Teils, ohne dass Auflistungs-, Bearbeitungs-, Validierungs- und Navigationstexte vermischt werden.
Reaktionsschnelles, sofort einsatzbereites CRUD
Das generierte CRUD beschleunigt die Bereitstellung, da es die sich wiederholende Grundlage des Bildschirms schafft: Auflistung, Formular, Integration mit API, Ressourcen, Paginierung, Filter, Aktionen und Code-Behind. Dennoch sollte es als Produkterlebnis und nicht nur als technisches GerĂŒst betrachtet werden.
Ein guter CRUD-Bildschirm muss es dem Benutzer ermöglichen, DatensĂ€tze zu finden, den aktuellen Status zu verstehen, sicher MaĂnahmen zu ergreifen und Fehler zu beheben. Dies gilt sowohl fĂŒr interne Backoffice-Bildschirme als auch fĂŒr Portale, die sich an Kunden oder Partner richten.
- WĂ€hlen Sie Listenspalten aus, die bei der Entscheidungsfindung hilfreich sind. Vermeiden Sie Netze mit technischen Feldern, die dem Bediener nichts sagen.
- Konfigurieren Sie Filter und Paginierung entsprechend der erwarteten Datenmenge und den Hauptsuchkriterien des Benutzers.
- ĂberprĂŒfen Sie die Validierungen und Fehlermeldungen, um das Problem in der DomĂ€nensprache und nicht nur in Bezug auf die Implementierung zu erklĂ€ren.
- Stellen Sie die ZustĂ€nde âLeerâ, âLadenâ und âAbsturzâ sicher, um stille Bildschirme zu vermeiden, wenn keine Daten vorhanden sind, API Zeit benötigt oder ein Vorgang nicht abgeschlossen wird.
- BestÀtigen Sie unwiderrufliche Löschungen und VorgÀnge und machen Sie deutlich, welcher Datensatz betroffen ist.
- Zeigen Sie mit lokalisierten Benachrichtigungen und Nachrichten klares Feedback nach dem Speichern, Bearbeiten, Löschen oder Fehlschlagen.
- SchĂŒtzen Sie Aktionen durch Berechtigungen im Backend und Frontend. Das Ausblenden von SchaltflĂ€chen verbessert das Erlebnis, ersetzt jedoch nicht die tatsĂ€chliche Autorisierung.
- ĂberprĂŒfen Sie die ReaktionsfĂ€higkeit auf kleineren Bildschirmen, insbesondere bei AktionsmenĂŒs, Filtern, Pflichtfeldern und Rastern mit vielen Spalten.
Der von Lino generierte Ausgangspunkt muss als kohÀrente und integrierte Basis behandelt werden. Von dort aus passt das Team die visuelle Dichte, die Feldreihenfolge, die Anzeigeregeln, Berechtigungen und Texte an, um den tatsÀchlichen Produktprozess widerzuspiegeln.
