Nieuws

DataBridge ontwikkelen in C#

DataBridge is ontwikkeld als herbruikbaar synchronisatieplatform om bedrijfsgegevens uit een lokale administratieomgeving naar externe systemen te verplaatsen, zoals HTTP-services, Microsoft SQL Server en MySQL. Het is geen eenmalig exporthulpmiddel, maar een duurzame verbinding tussen uiteenlopende technische omgevingen, flexibel genoeg om ook te werken als de precieze gegevensstructuur vooraf nog niet bekend is.

DataBridge ontwikkelen in C#

DataBridge: een universele synchronisatielaag met dynamische JSON en ExpandoObject-gegevens

DataBridge is ontwikkeld als herbruikbaar synchronisatieplatform om bedrijfsgegevens uit een lokale administratieomgeving naar externe systemen te verplaatsen, zoals HTTP-services, Microsoft SQL Server en MySQL. Het is geen eenmalig exporthulpmiddel, maar een duurzame verbinding tussen uiteenlopende technische omgevingen, flexibel genoeg om ook te werken als de precieze gegevensstructuur vooraf nog niet bekend is.

Een belangrijke technische keuze was een dynamisch gegevensmodel op basis van dictionaries, JSON-serialisatie en ExpandoObject-instanties die de interne ObjectFactory aanmaakt. Daardoor is DataBridge veel breder inzetbaar dan een traditionele koppeling die voor elke tabel en elk recordtype vaste DTO-klassen nodig heeft.

Projectcontext

In veel bedrijven bevat het bronsysteem waardevolle operationele gegevens, maar is het niet geschikt als directe backend voor webapplicaties, portalen, dashboards of koppelingen. Oudere systemen hebben vaak beperkte verbindingsmogelijkheden, tabelstructuren die niet op moderne applicaties zijn ingericht en installatiebeperkingen die directe toegang riskant maken.

DataBridge lost dit op als omzettings- en synchronisatielaag. Het leest brongegevens, brengt tabelstructuren in kaart, bereidt externe tabellen voor, houdt te synchroniseren records bij en verstuurt de gegevens naar het ingestelde doel. Afhankelijk van de installatie is dat een HTTP-endpoint, Microsoft SQL Server of MySQL.

Een sterk punt van de implementatie is dat voor mogelijke recordstructuren geen vast klassenmodel hoeft te worden geprogrammeerd. DataBridge kan records dynamisch samenstellen en versturen in een flexibele structuur. Pas de ontvangende kant bepaalt hoe deze wordt opgeslagen.

De centrale uitdaging: gegevens verplaatsen zonder ieder schema vast te programmeren

Traditionele koppelingen worden vaak kwetsbaar doordat ze een vast objectmodel verwachten. Elke tabel, veldenlijst en berichtstructuur moet vooraf in code worden gemodelleerd. Dat werkt voor kleine systemen, maar wordt kostbaar bij veel tabellen, veranderende structuren, verschillende administraties en meerdere externe backends.

DataBridge kiest een algemenere aanpak. Tijdens synchronisatie worden bronregels eerst verzameld in een Dictionary<string, object>. Elke regel wordt een dynamische verzameling veldnamen en waarden, in plaats van een instantie van een vaste klasse. Tekenreeksen worden opgeschoond, datums omgezet naar een veilig overdraagbaar tekstformaat, booleans behouden en getallen consequent geconverteerd. Administratiecontext, zoals ADMINCODE, wordt vóór verzending toegevoegd.

Die dictionary als tussenstructuur is de sleutel. De uiteindelijke gegevensvorm wordt bepaald door metadata en configuratie tijdens uitvoering, niet door aannames bij het compileren. DataBridge kan dus records vervoeren zonder deze volledig als sterk getypeerde C#-modellen te hoeven kennen.

De rol van ObjectFactory

De interne ObjectFactory maakt deze flexibiliteit praktisch bruikbaar. De methode CreateInstance neemt een Dictionary<string, object> en zet deze om in een dynamisch ExpandoObject. Elk sleutel-waardepaar wordt tijdens uitvoering naar het uitbreidbare object gekopieerd.

Dit lijkt een eenvoudig stukje infrastructuur, maar heeft grote gevolgen voor de architectuur. Als de gegevens eenmaal een ExpandoObject vormen, kan DataBridge ze in verzoekobjecten opnemen zonder voor elke tabel of bewerking een aparte gecompileerde klasse. Het verzoekmodel bewaart velden zoals data en parameters als algemene objecteigenschappen. Newtonsoft.Json serialiseert vervolgens het volledige verzoek naar JSON.

DataBridge kan daardoor het volgende samenstellen en versturen:

  • Dynamische recordverzamelingen voor synchronisatiebatches.
  • Tijdens uitvoering gemaakte parameterstructuren, bijvoorbeeld voor het aanmaken van externe tabellen.
  • Schemametadata die per tabel of administratie kan verschillen.
  • Structuren die niet praktisch in een vaste klassenhiërarchie passen.

ObjectFactory maakt zo van een eenvoudige dictionary een overdraagbare objectstructuur die zich als gewone JSON gedraagt. Daardoor blijft DataBridge aanpasbaar zonder dat de codebase onoverzichtelijk wordt.

Waarom ExpandoObject hier belangrijk is

ExpandoObject is niet alleen handig; het staat centraal in de brede inzetbaarheid van DataBridge.

Een ExpandoObject kan tijdens uitvoering dynamisch eigenschappen krijgen. Dat past goed bij synchronisatie, waarbij records uit tabellen met sterk verschillende velden worden verplaatst. In plaats van tientallen of honderden aparte berichtmodellen te onderhouden, kan DataBridge de structuur uit de werkelijke recordinhoud opbouwen en direct versturen.

Dit geeft DataBridge belangrijke voordelen:

  • Veel verschillende tabellen ondersteunen zonder steeds modellen te onderhouden.
  • Velden overdragen die uit de databasestructuur zijn ontdekt, in plaats van vooraf in code vastgelegd.
  • Eenvoudiger uitbreiden wanneer nieuwe tabellen of varianten worden toegevoegd.
  • Dezelfde verzoekverwerking gebruiken voor verschillende bewerkingen en bestemmingen.

Daardoor is de verwerking van gegevensbundels breed inzetbaar. Het overdrachtsformaat is flexibel genoeg voor onbekende of veranderende JSON-structuren, maar behoudt voldoende structuur voor gecontroleerde verwerking bij de ontvanger.

Hoe de dynamische gegevens door DataBridge gaan

De interne verwerking bestaat uit opeenvolgende omzettingsstappen.

  1. Bronregels worden uit de lokale administratiedatabase gelezen.
  2. Elke regel wordt omgezet in een dictionary met veldnamen en waarden.
  3. De dictionary wordt genormaliseerd, zodat tekenreeksen, datums, booleans en getallen veilig en consequent kunnen worden overgedragen.
  4. ObjectFactory.CreateInstance zet de dictionary om in een ExpandoObject.
  5. Het dynamische object wordt toegevoegd aan een verzoek met ook de tabelnaam, administratie, primaire sleutel en structuurmetadata.
  6. Het verzoek wordt naar JSON geserialiseerd en naar de ingestelde backend verzonden.
  7. De ontvangende backend interpreteert de dynamische gegevens en zet deze om in SQL-bewerkingen voor toevoegen, bijwerken of verwijderen.

Omdat het verzoekmodel data en parameters als algemene objecten bewaart, kan dezelfde berichtenstructuur voor veel DataBridge-acties worden hergebruikt: records synchroniseren, tabellen maken en tabellen verwijderen. De implementatie voorkomt onnodige specialisatie en houdt de logica consistent.

Onbekende JSON ontvangen, bruikbare gegevens opleveren

Een sterk punt van dit ontwerp is dat DataBridge met JSON-achtige structuren kan werken waarvan de precieze eigenschappen pas tijdens uitvoering bekend zijn. Het bouwt deze structuren uit dictionaries, serialiseert ze zonder een strikt klassencontract en reconstrueert ze aan de andere kant weer tot bruikbare sleutel-waardeverzamelingen.

Zowel de Microsoft SQL Server- als de MySQL-verwerking zet de dynamische recordgegevens bij ontvangst terug om naar dictionaries. De SQL-generatie kan daarmee algemeen werken. Het middendeel van DataBridge blijft flexibel, terwijl de opslaglaag nauwkeurige controle houdt over veldnamen, waardeformaten, controles van primaire sleutels en de keuze tussen toevoegen en bijwerken.

Dat is de balans in de architectuur: flexibel tijdens overdracht, zorgvuldig en doelgericht tijdens verwerking.

Universeel door het ontwerp, niet alleen als verkoopterm

Een platform “universeel” noemen heeft pas betekenis als de interne werking dat ondersteunt. In DataBridge is die inzetbaarheid zichtbaar in de implementatie:

  • Dezelfde verzoekstructuur kan HTTP, Microsoft SQL Server of MySQL bedienen.
  • Dezelfde gegevensaanpak kan records uit verschillende tabellen beschrijven zonder aparte modelklassen.
  • Dezelfde dynamische objectopbouw wordt gebruikt voor zowel gegevensbatches als bewerkingsparameters.
  • Dezelfde synchronisatiesoftware werkt over verschillende administraties en installatievormen heen.

Daarom is de combinatie van ObjectFactory en ExpandoObject zo belangrijk. Deze neemt onnodige afhankelijkheid tussen het bronschema en het overdrachtsschema weg. Als de gegevensvorm verandert, hoeft niet de hele koppeling te worden aangepast. DataBridge blijft werken met een dynamische maar gecontroleerde voorstelling van de gegevens.

Praktische voordelen van de dynamische aanpak

De flexibele JSON-verwerking is meer dan een technische voorkeur. Ze levert concrete voordelen in het gebruik op.

  • Nieuwe of gewijzigde velden vragen veel minder herstructurering van de code.
  • DataBridge kan meer tabellen en klantspecifieke varianten ondersteunen zonder een onbeheersbare groei van het klassenmodel.
  • De keuze van de backend blijft een configuratiekwestie, zonder herontwerp van de gegevensbundels.
  • De transportlaag blijft herbruikbaar voor verschillende synchronisatiefuncties.
  • Het project blijft beter onderhoudbaar doordat de logica draait om het uitlezen en omzetten van structuren, in plaats van eindeloze objectdefinities.

Dat is belangrijk voor een systeem dat oudere bedrijfssoftware met moderne platforms verbindt. Integratiesoftware moet met variatie kunnen omgaan. Daarvoor is DataBridge ontworpen.

Meer dan een hulpmiddel voor gegevensoverdracht

Naast de dynamische JSON-aanpak bevat DataBridge de voorzieningen voor betrouwbare synchronisatie: tabeldefinities uitlezen, primaire sleutels identificeren, externe structuren voorbereiden, synchronisatiewerk bijhouden en records in batches versturen. Het ondersteunt installaties met één database of aparte externe databases per administratie. Zo combineert het flexibiliteit tijdens uitvoering met een zorgvuldige synchronisatieaanpak.

Het resultaat is meer dan een connector: een tussenplatform dat gegevens uit oudere administraties bruikbaar maakt voor websites, portalen, rapportageomgevingen en bedrijfsapplicaties op maat.

Conclusie

Het meest onderscheidende aan DataBridge is de verwerking van gegevens die niet volledig vooraf in code hoeven te worden vastgelegd. Records worden opgebouwd als dictionaries, via ObjectFactory omgezet naar ExpandoObject-instanties, geserialiseerd als JSON en aan de ontvangende kant op een algemene manier gereconstrueerd. Dat geeft een aanpasbaarheid die veel traditionele koppelingen missen.

Die flexibele verwerking van onbekende JSON maakt DataBridge breed inzetbaar. Het kan uiteenlopende systemen verbinden, de transportlaag licht en dynamisch houden en toch betrouwbare, gecontroleerde resultaten in de doelomgeving opleveren. Voor een integratieplatform dat moet omgaan met wisselende schema’s, meerdere backends en veranderende bedrijfswensen is dit een van de sterkste architectuurkeuzes.

Terug naar nieuws

Meer

Gerelateerde artikelen

15 sep 2023

FileDropArea: een ActiveX-component voor slepen en neerzetten in FoxPro, gebouwd op .NET

FileDropArea lost een praktisch integratieprobleem op: bestaande Visual FoxPro-applicaties hadden een modern, gebruiksvriendelijk vlak nodig voor het slepen en neerzetten van bestanden, Outlook-bijlagen en links, zonder de omringende applicatie te herschrijven. Het resultaat is een via COM toegankelijke ActiveX-component op .NET Framework 4.8, geschikt gemaakt voor 32-bits FoxPro-omgevingen.

Wilt u met ons samenwerken?

Neem contact op, dan bespreken we uw project.