Novucura is een multi-tier webapplicatie. Dit betekent dat er een scheiding is tussen de verschillende programmeer lagen (tiers). Iedere laag kan met de andere lagen communiceren. Ook kunnen er meerdere versies van 1 laag bestaan. Zo kan er bijvoorbeeld in de presenatie laag naast de standaard internet presentatie een laag gebouwd worden voor webservices of mobiel internet.
Er is gekozen om altijd de Presentatie, Business logica en database laag te scheiden. Hierdoor is de applicatie goed beheersbaar, eenduidig en schaalbaar. Tijdens het programmeren is strikt aan deze structuur gehouden.
De presentatie laag kan een webservice zijn waardoor andere applicaties gebruik kunnen maken van functionaliteiten van de Business logica laag. Bijvoorbeeld een berekening kan op deze manier beschikbaar worden gesteld. Een aparte presentatie laag kan worden ontwikkeld voor mobiel devices of andere devices met een specifieke resolutie. De data laag kan communiceren met meerdere databases.
Door de lagen heen wordt gecommuniceerd met datasets waardoor het mogelijk is om de verschillende lagen op verschillende servers te installeren.
Novucura maakt gebruik van DataSet’s. Een DataSet is een in-memory store van databasegegevens obv XSD (XML Schema Definition). Een DataSet bevat een willekeurig aantal gegevenstabellen elk corresponderend met een databasetabel of view.
Een DataSet legt een gedistribueerde (disconnected) view vast van databasegegevens. Behalve de data in de tabellen kan een dataset ook informatie bevatten over constraints en relaties tussen de data in de tabellen. Dit maakt het mogelijk om behalve sequentieel ook hiërarchisch te navigeren door de data in de DataSet.
De DataSet kan gezien worden als een abstractielaag boven de datastore (bijvoorbeeld database of XML file), die gebruik maakt van geavanceerde functionaliteiten zoals optimistic locking. Een DataSet kan worden geserialiseerd naar een XML string. Voor het communiceren tussen de verschillende lagen wordt gebruik gemaakt van DataSet’s.
Voor het opslaan, selecteren en wijzigen van data wordt een stuk generieke code gebruikt dat op basis van de DataSet de data in de database selecteert en/of aanpast. Het opslaan van de DataSet wordt als een transactie gezien die in zijn geheel wel of niet lukt.
Door bij alle records gebruik te maken van Globally Unique Identifier (GUID) is datareplicatie of synchronisatie tussen verschillende database mogelijk. Ook kan er in de presentatielaag een nieuw record in de DataSet gemaakt worden zonder communicatie met de database. Hierdoor zijn er minder calls naar de database.
Een actie in de business laag wordt uitgevoerd als één transactie mbv DTC (Distributed Transaction Coordinator). Bijvoorbeeld bij het offreren van een verzekering wijzigt de status van een offerte aanvraag in de database. Vervolgens wordt er een nieuwe offerte opgeslagen in de database en tenslotte wordt er een notificatie mail gestuurd naar de klant. Als één van deze acties niet lukt dan wordt de totale transactie teruggerold. Hierdoor lukt een actie wel of niet en blijft er geen vervuilde of halve data achter. Dit komt de robuustheid en betrouwbaarheid van de data in de database ten goede.