Norma — käyttö­liittymä sääntöjen konfigurointiin

Frontend-kehitys, UI-suunnittelu2021

Norma: kansikuva

Kuvaus

Jyväskylän ammatti­korkea­koulun yritys­projekti­opinto­jaksolla muodostettu Avalor-projekti­ryhmä kehitti selain­käyttö­liittymän sääntöjen konfigurointiin. Normassa käyttäjä voi selata, hakea ja suodattaa sääntöjä sekä muokata tiettyjä osia säännöistä. JSON-muotoiset sääntöjen konfiguraatio­tiedostot noudetaan version­hallinta­järjestelmästä, ja käyttäjän tekemät muutokset viedään Git-committeina takaisin version­hallinta­järjestelmään.

TavoitteetKäyttäjä­ystävällinen tapa sääntöjen yllä­pitoon

Bonsky Digital Oy (liittyi osaksi Vincit Oyj:tä 1.5.2021) suunnittelee ja toteuttaa mm. sähköisiä asiointi­palveluja, verkko­palveluja, B2B-tilaus­järjestelmiä sekä tuote­tieto­ratkaisuja. Rules engine on Bonskyn mikro­palvelu­arkki­tehtuurissa käyttämä ratkaisu, jota hyödynnetään mm. järjestelmien ja tuote­tieto­pankkien välisten tieto­mallien mäppäykseen sekä datan muunnoksiin ja vertailuun.

Bonskyltä saadussa toimeksi­annossa pää­tavoitteena oli helpottaa sääntöjen konfigurointia. Avalor-projekti­ryhmän tehtävänä oli kehittää selain­käyttö­liittymä, jonka avulla käyttäjä voi selata sääntöjä ja tehdä niihin muutoksia. Muutosten versio­historia tuli säilyttää. Loppu­tuloksena haluttiin siis hallinta­työkalu, jota voivat käyttää sekä asiakkaat että yritys itse.

Norma toteutettiin MERN-stackilla (React, Node.js, Express ja MongoDB) ja SCSS:llä. Käyttö­liittymä suunniteltiin Figmassa, ja projekti­työskentelyssä hyödynnettiin ketteriä menetelmiä.

SuunnitteluKäyttö­liittymän kehitys Figmassa

Figma v1.0: rautalankamallit
Figma v1.0: rautalankamallit
Figma v2.0: käyttöliittymä
Figma v2.0: käyttöliittymä. Loin perusrakenteesta myös demon, jonka pohjalta React-kehitys oli helppo aloittaa.
Lopullinen käyttöliittymä: säännön hakeminen ja tietojen tarkastelu

HaasteetMoni­mutkaisen JSON-datan käsittely front­endissä

Sääntöjen konfiguraatiotiedostojen JSON-objektien määrä ja rakenne vaihteli paljon. Yksi projektin merkittävimmistä haasteista oli, miten backendistä saatava sääntödata voidaan esittää käyttöliittymässä järkevällä tavalla.

Hyödynsin sääntöjen tietojen esittämisessä rekursiivista renderöintiä. Esimerkiksi säännön ehtojen ANY ja ALL -osiot puretaan auki omina kokonaisuuksinaan, tarpeen mukaan sisäkkäin ketjutettuina. Osioiden lapsikomponenteille määrätään objektien avaimien ja rakenteen perusteella tiettyjä tyylimäärittelyjä. Näin muodostuu puumainen hierarkia, joka havainnollistaa ehtojen suhteita toisiinsa.

Toisinaan sääntöihin liittyvät avain-arvo -parien listat olivat satojen tai tuhansien rivien pituisia. Sovellusta testatessa huomasimme, että pisimmät listat aiheuttivat merkittäviä suorituskykyongelmia. Perehdyin aiheeseen, ja react-window-pakettia hyödyntämällä sekä ylimääräisiä re-rendereitä rajoittamalla paransin listojen suorituskykyä huomattavasti.

Käyttöliittymän kustomointi: värivariaatiot tallennetaan tietokantaan ja tuodaan CSS-muuttujina sovellukseen
Sääntöjen filtteröinti tiettyjen avain-arvo -parien perusteella

Mitä opinErinomaiset eväät tuleviin projekteihin

Toimeksianto tuntui haastavalta, mutta tartuimme tarmokkaasti haasteeseen. Pidin etenkin käyttöliittymän suunnittelusta ja toteutuksesta, joten oli mahtava kuulla, että lopputulos ylitti kaikki odotukset.

Projekti huipentui intensiiviseen kahden kuukauden koodausjaksoon, joka opetti paljon. Pääsin syventymään Reactiin, ja aiemmin hämmennystä aiheuttanut JSON-datan käsittely tuli tutuksi. Loistavan ryhmäilmapiirin ja tekemisen meiningin ansiosta tavoitteet saavutettiin kevyesti ja toimeksiantaja oli tyytyväinen.

Ota yhteyttä

Jos haluat jutella, laita postia osoitteeseen annukka@rajala.dev tai ota yhteyttä LinkedInissä.