Deze week stond in het teken van diepgaande refactoring van projectstructuren, het opzetten van een efficiënte NuGet workflow en verdere ontwikkeling van het Ghost CMS project voor een klant. Ook moest ik verschillende oplossingen ontwikkelen voor onverwachte bouwfouten in complexe solution-structuren.
Ghost CMS projectontwikkeling
Maandag begon vroeg met verdere ontwikkeling aan het Ghost CMS project. Bij het analyseren van de containerlogboeken ontdekte ik dat er nog steeds pogingen werden gedaan om verbinding te maken met een MySQL-server, ondanks dat ik deze configuratie uit de Docker Compose file had verwijderd. De oplossing lag in het expliciet configureren van Ghost om een SQLite database te gebruiken:
# Database configuration
database__client: sqlite3
database__connection__filename: /var/lib/ghost/content/data/ghost.dbDit verhielp het probleem waarbij de container bleef herstarten vanwege mislukte verbindingspogingen met een niet-bestaande MySQL-server.
Later in de week maakte ik twee versies van de Docker Compose-configuratie:
Een versie met SQLite voor eenvoudige implementaties
Een variant met MySQL voor productieomgevingen met hogere prestatie-eisen
Daarnaast creëerde ik automatiseringsscripts (zowel PowerShell als Bash) om de juiste permissies toe te kennen aan de content-map, onafhankelijk van het besturingssysteem waarop de container draait. De volledige configuratie werd afgerond met een Nginx configuratiebestand voor het opzetten van een reverse proxy met SSL-certificaatondersteuning voor domeinverbindingen.
E-shop refactoring en modernisering
Een groot deel van deze week heb ik besteed aan het refactoren van de E-shop codebase. Het project bevatte diverse uitdagingen:
Problemen met constructors en overervende klassen die tijdens eerdere refactoring niet correct waren bijgewerkt
Verouderde project SDK-versies die toekomstige onderhoudsproblemen zouden kunnen veroorzaken
Een complexe afhankelijkheidsstructuur tussen de verschillende projecten
Mijn eerste focus lag op het implementeren van een switch-mechanisme om eenvoudig te kunnen schakelen tussen lokale projectreferenties en NuGet-packages. Dit was een strategische beslissing om de ontwikkelworkflow te verbeteren:
Tijdens actieve ontwikkeling zijn lokale projectreferenties handig voor directe debugging
Voor stabiele builds en deployment zijn NuGet-packages de voorkeur
Het was interessant om te leren dat je voor .NET Framework projecten de projectbestanden vaak handmatig moet bewerken in een teksteditor, omdat Visual Studio niet alle details zichtbaar maakt in de GUI. Een waardevolle technische vaardigheid die ik nu heb opgedaan.
SDK-upgrade uitdagingen
Een van mijn meer ambitieuze taken was het upgraden van de SDK-versie voor verschillende projecten om deze toekomstbestendig te maken. Hoewel ik hier niet veel ervaring mee had, besloot ik de uitdaging aan te gaan.
Na mijn initiële refactoring had ik een versie die succesvol kon bouwen, maar er bleken onverwachte problemen te zijn met een target-bestand dat verantwoordelijk is voor het genereren van assembly-DLL's. Deze werd niet correct geïmporteerd of gebruikt na de SDK-upgrade.
Mijn mentor was verrast en geïnteresseerd in mijn poging om dit aan te pakken:
Hij vond het wel interessant en had niet verwacht dat ik dit zou doen of dat dit me (deels) zou lukken.
Vanwege tijdsbeperkingen hebben we besloten deze specifieke refactoring tijdelijk te pauzeren, maar het was een leerzame ervaring in het begrijpen van de complexiteit van .NET project upgrades.
NuGet workflow-optimalisatie
Een van de meest uitdagende aspecten van deze week was het optimaliseren van de NuGet-workflowstrategie. De hoofduitdaging was het valideren van welke packages werden gebruikt (lokaal versus online) en hoe we een betrouwbare schakelaar konden implementeren.
Mijn initiële strategie was het toevoegen van een opzettelijke fout (division by zero) in lokale code om te controleren of de correcte packages werden gebruikt:
Als tests slaagden, werden online packages gebruikt
Als tests faalden met de division by zero exception, werden lokale packages gebruikt
Nadat ik merkte dat de eenvoudige switch niet werkte zoals verwacht, onderzocht ik het gebruik van MSBuild-variabelen in de NuGet.config. Het idee was om voorwaardelijke logica toe te voegen aan de pakketbronverwijzingen.
Ik richtte een lokale NuGet-registry in door:
Global.props (fungerend als Directory.Build.props) te configureren met een pad voor package-output
PackageOnBuild op true te zetten om automatisch packages te genereren
Conditionele verwijzingen naar de lokale registry toe te voegen
Helaas ontdekte ik dat MSBuild-variabelen niet op tijd worden geladen voor de NuGet.config. De uiteindelijke oplossing was pragmatischer: beide registries toevoegen aan de config en handmatig commentaar toevoegen aan degene die niet gebruikt moet worden. Een belangrijk aandachtspunt hierbij is dat de bin/obj-mappen moeten worden opgeschoond na het wisselen tussen registries.
Testprojecten moderniseren
Een andere belangrijke refactoring was het omzetten van bestaande MSTest-projecten naar xUnit. Dit biedt moderne testfunctionaliteit en betere integratie met de huidige ontwikkelomgeving. Hierbij liep ik tegen een interessant probleem aan:
Het probleem was dat ik sommige testklassen nog niet had omgezet naar xUnit code, maar wel de project files refactored had naar xUnit. Hierdoor build de solution niet meer.
Deze ervaring leerde me een waardevolle les: zorg ervoor dat de migratie van testcode en de bijbehorende projectconfiguratie synchroon verlopen om onverwachte bouwfouten te voorkomen.
Documentatie en kennisdeling
Tegen het einde van de week heb ik aanzienlijke tijd besteed aan het verbeteren van de documentatie, met name door README-bestanden aan te vullen of te creëren voor de Core.All-projecten. Goede documentatie is cruciaal voor de overdraagbaarheid van kennis, vooral in complexe projectstructuren zoals deze.
Na een nacht reflectie kon ik veel verbeteringen aanbrengen in de documentatie die ik eerder had geschreven, wat het belang onderstreept van het laten bezinken van ideeën en periodieke herziening van technische documentatie.
Samenwerking en probleemoplossing
Deze week was ook een goede ervaring in teamwerk. Toen een collega-ontwikkelaar, Dries, meldde dat de Command Worker niet meer kon bouwen, gingen we samen troubleshooten:
We gingen in call en ik merkte dat een project dat recent is toegevoegd nog niet refactored was om de switch te gebruiken en dit gaf problemen met dubbele referenties (nugets - projects).
Ik hielp hem ook door projecten van de Command Worker over te zetten naar Core.All en de nodige refactoring uit te voeren. Dit soort directe samenwerking is ontzettend waardevol voor kennisuitwisseling en efficiënte probleemoplossing.
Conclusie
Week 9 was technisch uitdagend en zeer leerzaam. Ik heb waardevolle ervaring opgedaan met:
Het configureren van containergebaseerde applicaties
Complexe projectrefactoring en SDK-upgrades
NuGet packagebeheer en lokale/online registrystrategieën
Het moderniseren van testprojectstructuren
Het schrijven van effectieve technische documentatie
Deze ervaringen hebben me een dieper inzicht gegeven in softwareontwikkeling op enterpriseniveau, waarbij het beheren van complexe afhankelijkheden en het onderhouden van legacy-code vaak een cruciale rol speelt.