Scenario:
In een web applicatie heb je een pagina om een product aan het systeem toe te voegen (of te bewerken). Deze pagina toont alle velden van het entiteit product. Alles is zoveel mogelijk cliënt side georiënteerd d.m.v. KnockoutJS – dit werkt allemaal prima, mooie MVVM structuur. Alleen de geserializeerde view modellen (JSON) worden heen en weer gestuurd (WebAPI).
Huidig:
Op dit moment gaan alle berekeningen client side, in JS / het view model. Stel er zijn vier velden, laten we zeggen veld A t/m D. Het kan zo zijn dat als je in veld A wat intypt, velden B t/m D gelijk herrekend worden. De herreken formule is afhankelijk van meerdere velden van de entiteit. Dit werkt allemaal goed, met ‘keyup’ events wordt alles gelijk herrekend en bijgewerkt.
Probleem:
Nu komt dus dat we ook server-side de mogelijkheid willen gaan maken om daar alles te herrekenen. Het kan nu namelijk zo zijn dat we (via een gepland process/CRON) een update krijgen van een leverancier waardoor bij een X aantal producten veld A opeens veranderd van waarde. Dan moeten we ook aan de server kant de andere velden (B t/m D) kunnen herrekenen.
Op dit moment zie ik eigenlijk twee manieren waarop we dit kunnen doen:
In een web applicatie heb je een pagina om een product aan het systeem toe te voegen (of te bewerken). Deze pagina toont alle velden van het entiteit product. Alles is zoveel mogelijk cliënt side georiënteerd d.m.v. KnockoutJS – dit werkt allemaal prima, mooie MVVM structuur. Alleen de geserializeerde view modellen (JSON) worden heen en weer gestuurd (WebAPI).
Huidig:
Op dit moment gaan alle berekeningen client side, in JS / het view model. Stel er zijn vier velden, laten we zeggen veld A t/m D. Het kan zo zijn dat als je in veld A wat intypt, velden B t/m D gelijk herrekend worden. De herreken formule is afhankelijk van meerdere velden van de entiteit. Dit werkt allemaal goed, met ‘keyup’ events wordt alles gelijk herrekend en bijgewerkt.
Probleem:
Nu komt dus dat we ook server-side de mogelijkheid willen gaan maken om daar alles te herrekenen. Het kan nu namelijk zo zijn dat we (via een gepland process/CRON) een update krijgen van een leverancier waardoor bij een X aantal producten veld A opeens veranderd van waarde. Dan moeten we ook aan de server kant de andere velden (B t/m D) kunnen herrekenen.
Op dit moment zie ik eigenlijk twee manieren waarop we dit kunnen doen:
- We dupliceren de (JS) logica om de waarden te berekenen ook server side. Dit is natuurlijk een mega nadeel voor maintainability.
- Alle reken logica verhuist naar de server. Maar dat zou betekenen dat zodra een gebruiker een waarde veranderd (JS ‘keyup’ event momenteel) we direct het hele view model naar de server moeten posten, de server het model herrekend en deze vervolgens weer retourneert. Dit heeft natuurlijk een nadeel dat de applicatie duidelijk snelheid inlevert. Sowieso denk ik dat je in plaats van een ‘keyup’ dan eerder naar een ‘changed’ event moet gaan kijken. Vooral dat laatste is iets wat we eigenlijk niet willen.