Gränssnittet lever på servern, över en öppen WebSocket
Amber är byggt på Wisej, där fönster, kontroller och deras tillstånd finns i .NET på servern. Webbläsaren håller en persistent WebSocket-anslutning och tar emot enbart förändringarna, alltså vilka komponenter som ändrats och hur, inte en omritad sida och inte en bildström.
Följden är att det inte finns någon separat frontend att hålla i synk med backend. Händelsehantering, validering och databasåtkomst är samma kod i samma process, och det finns inget API-lager mellan skärmen och affärslogiken som kan komma i otakt vid en ändring.
Priset är att varje inloggad användare håller sitt tillstånd i serverminnet. Kapacitetsplaneringen blir därmed en minnesfråga snarare än en fråga om anrop per sekund, och en session hör hemma på en och samma servernod.
Datalagret är ett eget bibliotek i C#
Datamodellen ligger i ett separat klassbibliotek skrivet i C#, med en typad klass per tabell och repositoryklasser för läsning och skrivning. Åtkomsten sker med Dapper mot parametriserad SQL, utan ORM-lager emellan. Applikationen är fortsatt VB.NET och anropar biblioteket, vilket gör att språkbytet kan ske modul för modul i stället för som en samlad omskrivning.
Inga typade dataset används. För gridvyerna finns däremot en läsande EF Core-kontext, där sortering, filtrering, gruppering och sidbrytning översätts till SQL så att bara den efterfrågade sidan hämtas. Entiteterna där är nyckellösa och används enbart för läsning, all skrivning går via repositorna.