Sharpening your .NET applications

In detail

Het ontwerpen van echte client-serverapplicaties

Het ontwerpen van echte client-serverapplicaties

Het ERP dat ik gedurende vele jaren heb ontwikkeld en onderhouden, is een suite van client-serverapplicaties. De verschillende clienttoepassingen zijn ontwikkeld in .NET:

  • Een « thick client » in de vorm van een WinForms-applicatie.
  • Een Blazor Server Interactive-website.
  • Een MAUI-applicatie voor inventarisopname.
  • Een hybride MAUI-applicatie waarmee meer specifieke bedrijfsbehoeften kunnen worden ingevuld.

Al deze applicaties maken gebruik van dezelfde databaseserver, MS SQL Server.

Inzicht in de prestatiewinst

De praktijkervaring heeft me geleerd dat elke verbinding met de SQL-server een kost heeft. Ondanks de optimalisatie die .NET via connection pooling biedt, kost elke verbinding tijd. Een verwaarloosbare hoeveelheid tijd, weliswaar. Maar wanneer deze verbindingen herhaaldelijk worden gemaakt, heeft dit een concrete impact op de responstijden van de software zoals die door de gebruiker worden ervaren.

Hier ontstaat een echte « religie », met haar dogma’s en praktijken die strikt worden toegepast.

  • Geen enkele SQL-verbinding binnen een iteratie.
  • Verschillende SQL-query’s groeperen in één script, dat in één keer via één enkele verbinding wordt verstuurd.
  • Het achterwege laten (of tot een minimum beperken) van het gebruik van die kleine, weliswaar handige hulpfuncties die slechts één gegeven uit de database ophalen.
  • …

Het is duidelijk dat deze manier om de code te structureren bijzonder is en zelfs ingaat tegen sommige hedendaagse ontwikkelpraktijken.

Elke SQL-query moet worden geoptimaliseerd, « op maat gemaakt », om de laatste milliseconden te winnen die nog kunnen worden bespaard. In deze context, waarin elke SQL-query zorgvuldig wordt geoptimaliseerd, is een ORM doorgaans niet het meest geschikte hulpmiddel.

Daarnaast gelden de goede praktijken voor programmeren met SQL Server:

  • Geen enkele SELECT * FROM.
  • Gebruik van SqlBulkCopy om gegevens snel naar de SQL-server te laden.
  • Het toevoegen van relevante indexen (soms indexen op persistente berekende kolommen).
  • Het gebruik van SQL CLR in plaats van T-SQL voor complexere algoritmen.
  • …

Een evenwichtige verdeling van het werk tussen client en server

SQL Server kan een deel van de « business »-algoritmen voor zijn rekening nemen. Hierdoor wordt de client van dat deel van het werk ontlast. De SQL-server beschikt rechtstreeks over de gegevens. Soms is hij dan ook het best geplaatst om een langdurig proces volledig uit te voeren en vervolgens eenvoudigweg de verwachte waarde terug te sturen.

Goed ontworpen (en niet-recursieve) triggers zijn onze vrienden, omdat ze de beste plaats vormen om code uit te voeren die altijd moet worden uitgevoerd wanneer bepaalde gegevens wijzigen. Een uitstekend voorbeeld hiervan is het bijwerken van tellers voor voorraadhoeveelheden op basis van inkomende en uitgaande goederenbewegingen.

Gegevensintegriteit

Een database is een uitstekend hulpmiddel om de integriteit van gegevens te waarborgen. Het is echter noodzakelijk om het databaseschema vanaf het begin goed te ontwerpen, zodat de relaties perfect aansluiten bij de werkelijkheid die door deze gegevens wordt weergegeven.

Op dit niveau is het aangewezen om een hele reeks gegevensvalidaties te vertalen naar constraints (in de SQL-betekenis van het woord):

  • Niet-lege sleutels
  • Unieke gegevens
  • Btw-nummers
  • Gestructureerde mededelingen
  • …

Dit garandeert uiteindelijk dat, ongeacht de clientsoftware en ongeacht wie de auteur ervan is, de gegevens altijd overeenstemmen met wat het systeem als geheel verwacht.

Linux

SQL Server was lange tijd uitsluitend beschikbaar onder Windows. Vandaag draait het op dezelfde manier op een Linux-server. Hierdoor kunnen bepaalde licentiekosten worden verlaagd, terwijl de eindgebruiker een volledig identieke ervaring behoudt.

Mijn meest recente installaties zijn allemaal uitgevoerd onder Ubuntu.

In een client-serverarchitectuur is de database niet zomaar een opslagruimte waaruit applicaties informatie ophalen. Ze vormt een volwaardig onderdeel van de software, waarbij elke uitwisseling doordacht en geoptimaliseerd moet worden. Wanneer ze optimaal wordt benut, draagt ze bij aan de prestaties, neemt ze een deel van de businesslogica voor haar rekening en garandeert ze de integriteit van de gegevens, onafhankelijk van de applicaties die er gebruik van maken.

Vorige Volgende
Alle producten, technologieën en bedrijfsnamen die op deze website worden vermeld, zijn handelsmerken of gedeponeerde handelsmerken van hun respectieve eigenaars. De vermelde Microsoft-producten (SQL Server, Windows, MAUI, Xamarin, .NET, Blazor, ...) zijn handelsmerken van Microsoft Corporation. Ubuntu is een gedeponeerd handelsmerk van Canonical Ltd.
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.