Bij de meeste cursussen Angular-architectuur wordt theorie gegeven. Niet deze.
Hier leer je echte problemen op te sporen, gerichte beslissingen te nemen en systemen te bouwen die standhouden als het team groeit, het product verandert en de tijd verstrijkt.
Twintig modules. Praktijkgericht. Geen vulling.
INDEX — Praktische hoekige architectuur voor het echte leven
01 — Basis architectonische problemen
- Bedrijfslogica in componenten
- God diensten
- Dubbele of verspreide status
- Koppeling tussen functies
- Gemengde verantwoordelijkheden
- Mappen die er netjes uitzien, maar niet schalen
- Voortijdige abstracties
- Onnodige over-engineering
- Architectuur ontworpen voor vandaag, maar niet voor groei
- Code die moeilijk te verwijderen, verplaatsen of refactoren is
02 — Werkelijke projectstructuur
- Functiegebaseerd versus laaggebaseerd
- Wanneer elke aanpak gebruiken?
- Hoe een structuur te detecteren die niet schaalt
- Hoe te verdelen op domeinen of begrensde contexten
- Hoe mappen te ordenen voor echte teams
- Nuttige naamgevingsconventies
- Wat moet er wel en wat NIET in
shared - Hoe u kunt controleren of uw huidige structuur ×10 ondersteunt
03 — Component-architectuur
- Componenten te groot
- Componenten met te veel verantwoordelijkheden
- Slimme versus domme componenten
- Container/presentatief in modern hoekig
- Componentensamenstelling
- Wanneer hergebruiken en wanneer NIET
- Hoe u schone component-API's ontwerpt
- Ingangen/uitgangen versus signalen versus services
- Typische problemen in sjablonen
- Hoe u componenten kunt detecteren die moeilijk te onderhouden zijn
04 — Echte staat in Angular
- Welke soorten staten bestaan er?
- Hoe misbruik van staat te detecteren
- Lokale status versus gedeelde versus globale versus serverstatus
- Signalen versus RxJS
- Staat plaatsing
- Wanneer moet u de servicestatus gebruiken?
- Wanneer moet u signaalopslagplaatsen gebruiken?
- Wanneer moet u NgRx gebruiken?
- Hoe overcentralisatie te detecteren
- Hoe gedistribueerde chaos te detecteren
- Typische fouten bij bijwerkingen
- Normalisatie van de staat
- Statuschecklist
05 — Communicatie en gegevensstroom
- Gegevens omlaag/gebeurtenissen omhoog
- Correcte communicatie tussen componenten
- Onjuiste communicatie tussen componenten
- Communicatie tussen functies
- Tekenen van verborgen koppeling
- Diensten gebruiken om te communiceren
- Signalen gebruiken om te communiceren
- Wanneer een evenementenbus een slecht idee is
- Hoe afhankelijkheidsadressen te controleren
- Hoe u moeilijk te volgen gegevensstromen kunt detecteren
06 — Gegevenslaag en API-toegang
- Diensten versus opslagplaatsen
- DTO's versus modellen
- Transformaties en mapping
- Waar adapters plaatsen
- Typische fouten bij het gebruik van API's
- Hoe frontend en backend te ontkoppelen
- Opnieuw proberen, caching, paginering
- Oneindige scroll
- REST versus GraphQL van architectuur
- Hoe u kunt controleren of uw gegevenslaag schoon of gemengd is
07 — Routeringsarchitectuur
- Ontwerp routes met een intentie
- UX + SEO in routes
- Luie routes
- Bewakers
- Oplossen
- URL als statusbron
- Dieplinken
- Gekoppelde routes
- Slecht doordachte routes
- Controlelijst om navigatie en schaalbaarheid te beoordelen
08 — Rendering en mondiale strategie
- SPA, SSR, SSG, ISR
- Hoe te kiezen op basis van context
- SEO versus complexiteit
- Prestaties versus kosten
- Hoekige SSR-architectuur
- Hydratatie en architectonische impact
- Wanneer mag u SSR NIET gebruiken?
- Hoe u kunt controleren of een app een andere weergavestrategie nodig heeft
09 — Prestatiearchitectuur
- Wijzigingsdetectie, OnPush, signalen en prestaties
- Lui laden echt
- Codesplitsing en bundelstrategie
- Caching
- Virtueel scrollen en onthouden
- Prestatiebudgetten
- Hoe architectonische knelpunten te detecteren
- Wat u moet controleren voordat u gaat 'optimaliseren'
- Hoe onderscheid te maken tussen codeproblemen en architectuurproblemen?
10 — Architectuur testen
- Wat moet je testen en wat niet
- Eenheid versus integratie versus e2e
- Testbaarheid door ontwerp
- Hoe u moeilijk te testen code kunt detecteren
- Spotten met betekenis
- Kwetsbaarheid bij testen en overtesten
- Contracttesten frontend-backend
- Controlelijst om te controleren of een architectuur het testen bevoordeelt of breekt
11 — Nx en echte monorepo
- Wanneer het de moeite waard is en wanneer niet
- Apps versus libs, grenzen, afhankelijkheidsgrafiek
- Gedeelde bibliotheken, goed en slecht gemaakt
- Beïnvloed, caching, code-eigendom
- Hoe u kunt opschalen naar meerdere teams
- Monorepo anti-patronen
- Controlelijst controleren
12 — Microfrontends en modulefederatie
- Wanneer ja en wanneer nee
- Welk echte probleem lossen ze op?
- Verborgen kosten
- Host versus afstandsbedieningen, versiebeheer, communicatie tussen MFE's
- Onafhankelijke implementatie en organisatorische complexiteit
- Checklist om te beslissen of het loont
13 — Handige ontwerpsystemen
- Welk probleem lossen ze op en wanneer is een serieus probleem niet nodig?
- Componentbibliotheken, tokens, thema's, varianten
- Consistentie versus flexibiliteit
- Verhalenboek, synchronisatie van ontwerp en ontwikkeling
- Typische fouten
- Hoe u kunt controleren of uw UI-systeem schaalt of crasht
14 — Frontend-beveiliging
- XSS, CSRF, ontsmetting
- Verificatiearchitectuur: JWT, vernieuwingstokens
- Bewakers en op rollen gebaseerde toegang
- Beveiligingsproblemen in SSR
- Praktische revisiechecklist
15 — Waarneembaarheid en onderhoud
- Logboekregistratie, foutopsporing, Sentry, statistieken
- Conceptuele tracering, functievlaggen, A/B-testen
- Hoe blinde vlekken te detecteren
- Hoe u kunt controleren of een app in productie kan worden gebruikt
16 — DevEx en platformdenken
- Ontwikkelaarservaring en tooling
- CI/CD, generatoren, schema's, automatisering
- Hoe onnodige wrijving te detecteren
- Hoe je architectuur voor teams ontwerpt en niet alleen code
17 — Afwegingen en besluitvorming
- Hoe beslissingen te rechtvaardigen
- Kosten versus voordelen, complexiteit versus schaalbaarheid, snelheid versus onderhoudbaarheid
- Bouwen versus kopen
- Hoe ADR's te schrijven
- Hoe je een beslissing verdedigt in een sollicitatiegesprek of een echte baan
18 — Hoekige architect anti-patronen
- Overengineering, nutteloze lagen, voorbarige abstracties
sharedslecht ontworpen, onnodige mondiale toestand- Kruisafhankelijkheden, stille koppeling
- Slechte modularisatie, negeer echte statistieken
- checklist voor rode vlaggen
19 — Praktische audit van Angular-apps
- Een bestaande app beoordelen
- Waar je eerst naar moet kijken
- Welke tekenen duiden op ernstige schulden?
- Hoe problemen te prioriteren
- Wat moet je eerst repareren en wat moet je nog niet aanraken
- Hoe u een nuttig architectuuronderzoek kunt doen
20 — Echte cases en training
- E-commerce audit
- SaaS-dashboardaudit
- Backoffice-audit van ondernemingen
- Publieke app-audit met SEO
- App-ontwerp vanaf nul
- Chaotisch app-herontwerp
- Interviewvragen
- Detectie-, beslissings- en verbeteringsoefeningen
Module 0 — Systeembasis
Punt 0 is geen inhoudsmodule. Het is de manier van kijken die je gedurende het hele stappenplan zult gebruiken.
Voordat u over specifieke problemen in Angular praat, moet u een vraag beantwoorden:
Hoe kijk je naar een app die je niet kent en beslis je of deze goed of slecht is?
Daar zijn vier basisvaardigheden voor.
1. Analyseer een app zonder code aan te raken
De eerste lezing van een app vindt niet plaats in de editor. Het zit in de structuur. Voordat u een enkel bestand opent, kunt u informatie extraheren:
- Hoe heten de mappen? Zeggen de namen wat ze doen?
- Is er een map
shareddie meer weegt dan al het andere? - Hoeveel nestniveaus heeft de structuur?
- Hebben de modules of features domeinnamen of technische namen?
- Waar zijn de diensten? Los of binnen de kenmerken?
Dit vertelt je al veel over de vraag of degene die de app heeft gemaakt in zakelijke termen of in termen van technische lagen heeft gedacht.
2. Architectuur op een praktische manier beoordelen
Reviewen is niet het van boven naar beneden lezen van code. Het stelt vragen met criteria:
- Waar leeft de bedrijfslogica?
- Wie weet wat in elke laag?
- Hoeveel sites moet u wijzigen om een nieuwe functie toe te voegen?
- Zijn er afhankelijkheden die de verkeerde kant op gaan?
Een senior architect begint niet met het meest complexe onderdeel. Begin met de punten met het hoogste risico: gedeelde services, de mondiale status en de laag voor gegevenstoegang.
3. Detecteer problemen vóór het programmeren
De meeste architectonische schade ontstaat bij vroege beslissingen die irrelevant lijken:
- "Ik zet dit voorlopig op een gedeelde service"
- "De bovenliggende component verwerkt deze status, daarna verplaatsen we deze"
- "We gebruiken NgRx voor alles, dus het is consistent"
Deze beslissingen hebben maanden later echte gevolgen. Het architecturale criterium is om te weten wat elke beslissing oplevert en welke schulden het met zich meebrengt.
4. Zet theorie om in echte checklist
Elk concept dat we in deze routekaart zullen zien – slimme/domme componenten, plaatsing van de staat, goddelijke diensten, enz. – moet eindigen in een vraag die je jezelf kunt stellen terwijl je echte code beoordeelt:
- Weet dit onderdeel waar de data vandaan komen?
- Heeft deze service meer dan één reden om te veranderen?
- Bestaat deze toestand op twee verschillende plaatsen?
Als je van een concept geen beoordelingsvraag kunt maken, heb je het nog niet geïnternaliseerd.
Module 1 — Een Angular-app analyseren zonder code aan te raken
De eerste architectuurbeoordeling vindt plaats voordat de editor wordt geopend. Alleen al uit de mapstructuur en bestandsnamen kun je al duidelijke kwaliteitssignalen afleiden. Dit is wat een senior architect de eerste 10 minuten zou doen met een onbekende app.
Waarom maakt het uit?
- Als het lang duurt om architectonische problemen op te sporen, stijgen de kosten voor het corrigeren ervan exponentieel.
- Een slecht ontworpen structuur vanaf dag 1 wordt een technische schuld die het team maanden later blokkeert.
- Door een snel visueel oordeel te ontwikkelen, kunt u betere beslissingen nemen voordat u ook maar één regel code schrijft.
Stap 1 — Lees de mapstructuur als een kaart
De mappenstructuur is de eerste zichtbare architectonische beslissing. Het vertelt je hoe het team hun mentale wereld heeft georganiseerd: denken ze in termen van technologie of in termen van business?
Wat is een functie?
Een feature is een complete bedrijfsfunctionaliteit. Geen bestandstype. Geen technische laag.
Denk aan een e-commerce-app. De kenmerken zijn:
- De productcatalogus
- Het winkelwagentje
- Het afrekenproces
- Het gebruikersprofiel
- Orderbeheer
Elk van deze is een onderdeel van het bedrijf dat op zichzelf zinvol is. Een gebruiker komt binnen, bladert door de catalogus, voegt toe aan winkelwagen, rekent af. Dat zijn kenmerken.
Model 1 — Organisatie per technische lagen (problematisch op schaal)
Dit is wat bijna iedereen doet als ze beginnen, omdat het er netjes uitziet:
src/app/
components/
product-card.component.ts
product-list.component.ts
cart-item.component.ts
checkout-form.component.ts
user-profile.component.ts
services/
product.service.ts
cart.service.ts
checkout.service.ts
user.service.ts
models/
product.model.ts
cart.model.ts
user.model.ts
Het echte probleem: u moet het afrekenproces aanpassen. Om te begrijpen wat het inhoudt, navigeert u tussen drie verschillende mappen: u zoekt naar het onderdeel in components/, de service in services/, het model in models/. Als er een specifieke kassapijp is, wordt deze in pipes/ gemengd met pijpen van andere features.
Om één functie te wijzigen, navigeer je door de hele app. Dat is koppelen door structuur. Wanneer het team groeit, raken twee mensen die aan verschillende functies werken voortdurend dezelfde mappen aan → conflicten in git, moeite om te weten wie wat bezit.
Model 2 — Organisatie op basis van kenmerken (welke schaal)
src/app/
features/
catalog/
components/
product-card.component.ts
product-list.component.ts
services/
product.service.ts
models/
product.model.ts
catalog.routes.ts
cart/
components/
cart-item.component.ts
cart-summary.component.ts
services/
cart.service.ts
cart.routes.ts
checkout/
components/
checkout-form.component.ts
order-confirmation.component.ts
services/
checkout.service.ts
checkout.routes.ts
shared/
core/
Waarom dit werkt: Wanneer u op afrekenen tikt, staat alles bij het afrekenen bij elkaar. Een nieuwe ontwikkelaar weet precies waar hij moet zoeken. Eén persoon kan eigenaar zijn van een hele functie. U kunt een geheel object verwijderen door alleen de map ervan te verwijderen. Git-conflicten tussen verschillende features verdwijnen vrijwel volledig.
De belangrijkste vuistregel: als u een element verwijdert, kunt u dan de hele map ervan verwijderen zonder iets anders aan te raken? Als het antwoord ja is, is het kenmerk goed geïsoleerd. Als je in de app naar stukjes moet zoeken, is dat niet het geval.
Stap 2 — Lees de namen
Namen zijn documentatie. Een slechte naam verbergt bedoelingen en voegt cognitieve belasting toe aan elke persoon die de code leest.
shared/ — wat er wel en niet in moet staan
shared/ is voor dingen die meerdere functies gebruiken en die GEEN eigen bedrijfslogica hebben.
Corrigeren in shared/:
shared/
components/
button/
modal/
spinner/
avatar/
pipes/
date-format.pipe.ts
truncate.pipe.ts
directives/
click-outside.directive.ts
validators/
email-validator.ts
Het zijn herbruikbare UI-onderdelen of pure hulpprogramma's. Ze weten niets van het bedrijf. Een ButtonComponent weet niet of het een betaalknop of een gebruikersprofielknop is. Hij weet alleen hoe hij een knop moet zijn.
Onjuist in shared/:
shared/
services/
cart.service.ts ← lógica de negocio aquí
user-auth.service.ts ← pertenece a auth/core
product-filter.service.ts ← pertenece a catalog
report-generator.service.ts ← pertenece a reporting
Als u services met bedrijfslogica in shared/ ziet, betekent dit dat iemand niet wist waar hij ze moest plaatsen. Na verloop van tijd wordt shared/ de verzamelnaam van de app.
core/ — wat het is en wat het niet is
core/ is voor singleton-infrastructuur waarvoor de hele app één keer nodig is.
Corrigeren in core/:
core/
services/
auth.service.ts
logger.service.ts
error-handler.service.ts
interceptors/
auth.interceptor.ts
error.interceptor.ts
guards/
auth.guard.ts
models/
user-session.model.ts
Onjuist in core/:
core/
components/
dashboard.component.ts ← eso es una feature
home.component.ts ← igual
services/
product.service.ts ← pertenece a catalog
report-generator.service.ts ← pertenece a reporting
Dit zijn dingen die één keer worden geïnstantieerd en die de hele app beïnvloeden. De authenticatie-interceptor onderschept alle HTTP-verzoeken voor de hele app en bevindt zich daarom in core/.
Vage namen – rode vlaggen
Een vage naam is een uitgestelde beslissing. Wanneer iemand data.service.ts maakt, heeft hij nog niet besloten over welke gegevens de service het heeft.
| wat je ziet | Wat het kan betekenen |
|---|---|
shared/ heel groot |
Alles wat nergens anders paste. Het wordt een allegaartje. |
common/ |
Hetzelfde als shared/, maar slechter genoemd. Zonder criteria van wat erin gaat. |
utils/ met diensten |
Bedrijfslogica vermomd als nutsvoorziening. Ernstige rode vlag. |
helpers/ |
Hetzelfde als utils/. De naam zegt niets over verantwoordelijkheid. |
components/ in hoofdmap |
Geen organisatie per domein. Alle componenten bij elkaar. |
core/ met 40 bestanden |
Slecht gedefinieerde kern. shared/ werd gebruikt als tweede. |
app.service.ts |
Een godsdienst die wacht om te groeien. Maximaal alarmsignaal. |
data.service.ts |
Gegevens waarover? Onbepaalde verantwoordelijkheid vanwege de naam. |
helper.service.ts |
Het wordt uiteindelijk een service met niet-gerelateerde methoden. |
main.component.ts |
Wat is "belangrijkste"? Algemene naam die echte verantwoordelijkheid verbergt. |
Naamregel: Als de bestandsnaam niet precies vertelt wat het doet, doet het bestand waarschijnlijk te veel of is het slecht gelokaliseerd.
Concrete voorbeelden van vage namen en wat ze verbergen:
utils/format.tsmet 800 regels: mix van datumopmaak + formuliervalidatie + API-transformatie.helper.service.ts: wordt uiteindelijk een godsdienst met niet-gerelateerde methoden.app.service.ts: een dienst genaamd de hele app die verantwoordelijkheden heeft voor de hele app.
Stap 3 — Tel en meet zonder bestanden te openen
Voordat u code leest, kunt u deze observaties rechtstreeks vanuit de structuur maken:
Onderdeelgrootte als teken
| Teken | Wat geeft het aan? |
|---|---|
| +300-400 regels in één component | Je doet bijna altijd te veel. Het is geen absolute regel, maar het is de moeite waard om te onderzoeken. |
| +10 in- en uitgangen | Te complexe API. Kandidaat op te delen in verschillende componenten. |
| Directe HTTP-aanroepen in component | Combineer presentatie met gegevenstoegang. Servicelaag ontbreekt. |
| 1-2 componenten per functie | Ze doen waarschijnlijk te veel. Gebrek aan interne verdeeldheid. |
| +20 wereldwijde aanbieders | Te veel staats- en gecentraliseerde logica. Niet alles hoeft mondiaal te zijn. |
Wereldwijde diensten — het gevaar van providedIn: 'root'
Een wereldwijde service betekent dat elk onderdeel van elke functie deze kan injecteren en gebruiken. Dat creëert onzichtbare afhankelijkheden tussen functies die onafhankelijk zouden moeten zijn.
// Servicio que DEBERÍA ser local a la feature de catalog:
@Injectable({ providedIn: 'root' }) // ← señal de problema
export class ProductFilterService { ... }
// Ahora cualquier componente de cualquier feature puede usarlo.
// Si catalog cambia su lógica de filtrado, puede romper
// algo en una feature aparentemente no relacionada.
Stap 4 — app.module.ts of app.config.ts: waar u op moet letten
In apps met modules (Angular <17 of ouder)
@NgModule({
imports: [
BrowserModule,
HttpClientModule,
RouterModule,
AuthModule, // ← bien, infraestructura singleton
ProductModule, // ← señal de problema
CartModule, // ← señal de problema
CheckoutModule, // ← señal de problema
UserModule, // ← señal de problema
DashboardModule, // ← señal de problema
// Si hay 15+ módulos de features aquí,
// el lazy loading no está funcionando.
],
providers: [
ProductService, // ← si hay 20+ providers aquí,
CartService, // hay demasiada centralización
UserService,
AuthService,
]
})
Featuremodules moeten lui (op aanvraag) worden geladen en niet rechtstreeks in de rootmodule worden geïmporteerd. Als ze er allemaal zijn, worden ze allemaal geladen bij het opstarten, zelfs als de gebruiker ze nooit nodig heeft.
In zelfstandige apps (Angular 17+)
// app.config.ts
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes, withLazyLoading()), // ← correcto
provideHttpClient(withInterceptors([authInterceptor])),
provideAnimations(),
ProductService, // ← esto NO debería estar aquí
CartService, // ← pertenece a la feature de cart
]
}
Algemene configuratieregel: De globale configuratie mag alleen een infrastructuur hebben die van invloed is op de hele app: router met lazyloading,
HttpClientmet globale interceptors, animaties, infrastructuur-singleton-services (auth, logger, error handler). Als u functieservices in de globale configuratie ziet, registreert iemand dingen globaal voor het gemak, niet voor noodzaak.
Volledige checklist — Eerste lezing van een Angular-app
Structuur
- Is de structuur georganiseerd op basis van kenmerken (bedrijfsdomein) of op basis van technische lagen?
- Kan ik een volledig object verwijderen door alleen de map ervan te verwijderen zonder iets anders aan te raken?
- Hebben de functies zakelijke domeinnamen (
checkout,catalog) of technische namen (list,form,detail)? - Zijn er mappen met vage namen:
utils,helpers,common,misc,data?
shared/ en core/
- Bevat
shared/alleen UI-componenten en hulpprogramma's zonder bedrijfslogica? - Bevat
core/alleen singleton-infrastructuur (interceptors, bewakers, auth-service)? - Zijn er diensten met bedrijfslogica binnen
shared/? - Heeft
core/functiecomponenten of domeinservices?
Diensten en aanbieders
- Zijn de zakelijke dienstverlening binnen uw mogelijkheden of wereldwijd los?
- Zijn er meer dan 20 mondiale aanbieders?
- Importeert de rootmodule of
app.config.tsfeaturemodules rechtstreeks (zonder lui)? - Zijn er services met
providedIn: 'root'die lokaal moeten zijn voor een functie?
Namen
- Zeggen de bestandsnamen precies wat ze doen?
- Zijn er bestanden waarvan de naam op een deel van de app van toepassing kan zijn?
- Is er een bestand met de naam
app.service.ts,data.service.tsofhelper.service.ts? - Weegt
shared/zwaarder dan welk afzonderlijk kenmerk dan ook?
Oefening
Zoek naar een openbaar Angular-project op GitHub. Het kan uw eigen project zijn of een open source-project. Zonder bestanden te openen, alleen maar kijkend naar de mapstructuur en namen:
- Welk organisatiemodel gebruik je: kenmerken of technische lagen?
- Welke namen geven je twijfels of vermoedens?
- Waar vermoed je dat de bedrijfslogica zich bevindt?
- Welke map heeft volgens jou de meeste mix aan verantwoordelijkheden?
- Kunt u een element verwijderen zonder iets anders aan te raken?
Deel wat u tijdens de sessie waarneemt en we bekijken het samen zoals een senior architect zou doen.
Prompt: analyseer uw project met de 4 punten
Kopieer deze prompt en gebruik deze met elke AI (ChatGPT, Claude, Copilot) en geef deze door aan de mappenboom van uw project:
Analyseer de projectarchitectuur door deze 4 punten van Pijler 1 toe te passen en genereer een rapport.
PUNT 1 — Mappenstructuur
Analyseer apps/ en libs/ en antwoord:
- Is de organisatie op basis van kenmerken (bedrijfsdomein) of op basis van technische lagen?
- Kun je een volledig object verwijderen door alleen de map ervan te verwijderen?
- Hebben de functies domeinnamen (
checkout,catalog) of technische namen (list,form,detail)? - Zijn er mappen met vage namen:
utils,helpers,common,misc,data? - Toont de daadwerkelijke boomstructuur van mappen die u hebt gevonden.
PUNT 2 — Bestands- en mapnamen
Zoek het hele project en lijst:
- Bestanden met vage namen:
data.service.ts,helper.service.ts,app.service.ts,main.component.ts,utilsmet services erin. - Diensten met bedrijfslogica binnen
shared/. - Componenten of domeinservices binnen
core/. - Weegt
shared/zwaarder dan welk afzonderlijk kenmerk dan ook? Aantal bestanden.
PUNT 3 — Mondiale diensten
Zoek het hele project:
- Alle services met
providedIn: 'root'— vermeldt welke dit zijn en of ze lokaal voor een functie moeten zijn. - Telt hoeveel mondiale aanbieders er in totaal zijn.
- Identificeert wereldwijd geregistreerde zakelijke services wanneer deze binnen uw functie zouden moeten vallen.
- Zoek naar diensten in
libs/services/die duidelijk tot een specifiek domein behoren.
PUNT 4 — Algemene configuratie (app.config.ts of app.module.ts)
Zoek het rootconfiguratiebestand van elke app en analyseer:
- Wat wordt er mondiaal geregistreerd wat niet mag?
- Worden de featuremodules geladen met lazyloading of worden ze rechtstreeks geïmporteerd?
- Zijn er zakelijke services in de globale configuratie?
- Hoeveel aanbieders zijn er in totaal wereldwijd geregistreerd?
RAPPORTFORMAAT
Gebruik voor elk punt deze exacte structuur:
✅ Wat is goed
(concrete lijst met echte codevoorbeelden)
⚠️ Borden om te controleren
(concrete lijst met bestandspad en waarom dit een teken is)
❌ Problemen oplossen
(concrete lijst met bestandspad, probleem en daadwerkelijke impact)
Uiteindelijk omvat het:
Samenvatting
Een tabel met de 4 punten, een status emoji (✅ ⚠️ ❌) en een conclusielijn per punt.
Prioriteit gegeven aan volgende stappen
Lijst met maximaal 5 specifieke acties, gerangschikt op impact, met het exacte pad van het bestand of de map die moet worden aangeraakt.
Wees direct. Leg niet uit wat een kenmerk of theorie is. Analyseer gewoon dit specifieke project en geef echte bevindingen.
