Skip to content

Architecture - vue d'ensemble

Principe general

Ce repo est un gabarit Umbraco minimal et reutilisable. Une seule application runtime (src/Web/) heberge Umbraco 17 ; il n'y a volontairement pas de couche metier separee. Les projets aval ajoutent au besoin des projets Application (metier), Domain (entites) et Persistence (DbContext, migrations) - absents du template.

Le projet hote contient l'echafaudage commun : composition Umbraco, points d'extension (content finder, controllers techniques), SEO, consentement cookies, personnalisations backoffice, pipeline frontend Vite et deploiement Docker.

Structure de solution

UmbracoBaseTemplate.sln (a renommer dans chaque projet aval) regroupe :

ProjetDossierRole
Websrc/Web/Seul projet runtime. Application Umbraco.
Tests.Commontests/Common/Base de test partagee (TestBase). Le csproj s'appelle Tests.Common mais le dossier est Common - decalage intentionnel (voir README).
Tests.Webtests/Web/Tests du projet Web ; reproduit l'arborescence de src/Web/. Contient un DummyTest d'exemple.

Bootstrap (src/Web/Program.cs)

Modele top-level statements (pas de classe Startup). Ordre :

  1. En Development, charge appsettings.local.json (optionnel, git-ignore).
  2. Bind CookieConsentOptions (section CookieConsent).
  3. Configure StaticFileOptions.OnPrepareResponse : /css et /js sont fingerprintes (asp-append-version), donc Cache-Control: public,max-age=31536000,immutable ; les autres assets ont max-age=604800. ImageSharp gere ses propres en-tetes pour /media.
  4. builder.CreateUmbracoBuilder().AddBackOffice().AddWebsite().AddDeliveryApi().AddComposers().Build().
  5. Sentry : charge uniquement si Staging/Production ET SentryUrl non vide. Prod : 10% trace sampling ; Staging : ajoute ProfilingIntegration (500 ms).
  6. Page d'exception dev si Development ou ForceDisplayDeveloperExceptionPage=true, sinon UseExceptionHandler("/error").
  7. UseRewriter (rewrites IIS rewriteRules.xml) uniquement en Staging/Production.
  8. BootUmbracoAsync() puis UseUmbraco() (middleware + endpoints backoffice et website).

Composition (src/Web/SiteComposer.cs)

IComposer unique, decouvert par AddComposers(). Il :

  • enregistre NotFoundContentFinder comme ContentLastChanceFinder (404 par site),
  • enregistre UmbracoUserAppAuthenticator comme provider 2FA backoffice.

C'est le point central pour ajouter des enregistrements DI et des wire-ups Umbraco.

Flux de requete

  1. Page editoriale : Umbraco route vers le template correspondant au document type (HomePage.cshtml, etc.) qui rend via _MasterLayout.cshtml.
  2. 404 : aucun contenu trouve -> NotFoundContentFinder resout la racine du site (match du host sur les domaines Umbraco) puis cherche un enfant de type notFoundPage ; rend NotFoundPage.cshtml.
  3. 500 / erreurs : UseExceptionHandler("/error") -> ErrorController (~/error/, chemin reserve) ; un 500 redirige vers le noeud internalServerErrorPage, sinon vers /.
  4. Endpoints techniques : SitemapController (/sitemap, XML multilingue), RobotsController (/robots.txt), DevLoginController (/l, DEBUG uniquement).

Detail des extensions : ../modules/extensibility.md.

Acces aux donnees

Le template n'a pas de couche d'acces aux donnees custom ni d'ORM additionnel : tout passe par l'API Umbraco (IPublishedContent + modeles ModelsBuilder) et la base Umbraco (SQL Server). Un projet aval qui a besoin de tables propres ajoutera un projet Persistence.

ModelsBuilder

Mode SourceCodeAuto (appsettings.json) : Umbraco genere des classes C# typees dans src/Web/umbraco/Models (namespace Web.umbraco.Models) a partir des document types. Ces fichiers *.generated.cs ne doivent pas etre edites a la main. Les extensions (PageExtensions) castent IPublishedContent vers les interfaces generees (IPageSettings) ; elles ne compilent qu'une fois les modeles produits.

Fichiers cles

SujetFichier
Bootstrap / pipeline HTTPsrc/Web/Program.cs
Composition / DIsrc/Web/SiteComposer.cs
Content finder 404src/Web/ContentFinders/NotFoundContentFinder.cs
Controller d'erreursrc/Web/Controllers/ErrorController.cs
Helpers SEOsrc/Web/Extensions/PageExtensions.cs
Layout principalsrc/Web/Views/Layouts/_MasterLayout.cshtml
Configsrc/Web/appsettings.json

Contributors

No contributors

Changelog

No recent changes