Jeg har et noe anstrengt forhold til termer postfikset med ordet “arkitektur”. Ditto med akronymer designet for fremmedgjøring av kjøpere, skreddersydd for intellektuell vold mot tilfeldige faglige forbipasserende, eller nye begreper som mer eller mindre, gjerne tilfeldig, helt eller delvis dekker konsepter som allerede har levd en stund.
Den totale ironi oppstår gjerne når du i tillegg spotter “KISS” og “YAGNI” i den samme utfloden av konstruerte begreper.
Føler du at du drikker av den evinnelige brannslangen ? Er du på hæla og føler for litt etterutdanning ?
Frykt ikke ! Ingen grunn ikke la deg skremme av all hypen. Som du snart skal få se, så skal det ikke mye til før du kan erklære compliance med det meste, og dermed rettferdiggjøre et saftig påslag i timeprisen din. Vi bringer et lite eksempel fra kjelleren:
Det hele startet med at Are etter ferdigstilling av Spar7-kortet, i en chat nevnte at det hadde vært kjekt med et generelt erstatningskort for de gamle kassene. Jeg var enig, og etter i overkant mye bitfikling og assemblerprogrammering, så slo det meg at et eget språk måtte være kjekt, slik at det skulle bli lettere å uttrykke seg.
>”ekstern DSL” – check !
Jeg ser det står noen connectorer på kortet. Jeg kan sende signaler inn og få signaler ut. Signalene går mye i 0′er og 1′er men det er definitivt semantikk knyttet til dem. Det er legitimt å kalle et sett av disse for “kommandoer”, eller kanskje “meldinger” ?
Iom at klientene ikke trenger å vente på prosessering av meldingene, men forsåvidt får eventer tilbake, så kan jeg kanskje også bruke ordet “asynkront”. Det går noen kobberbaner mellom connectorene og en stor svart brikke på kortet. Da dette nok er mediet for transport av meldinger, så kan jeg kanskje også benytte ordet “meldingsbuss” med god samvittighet.
> “asynkron meldingsbuss” – check !
> “eventdrevet arkitektur” – check !
Signalene er organisert i funksjonelle grupper. Det er klare grenser mellom gruppene. Alle meldinger deler det samme skjemaet. Alle er operasjoner er autonome.
>”Tjenesteorientert arkitektur” – check !
Da jeg har strenge realtimekrav, så må jeg route eventene inn i en intern meldingskø så fort som overhodet mulig, slik at task-schedulern min kan snappe meldinger ut fra køa i ledige stunder og dispatche disse til riktig eventhandler. Vi er bare et lagrekall unna…
>”Event sourcing” – check !
Hmm, når jeg tenker meg om, så er alle meldingsreturer av typen void.
>”Idempotent” – check !
Displayenes state lagres i egne buffer og pulses av egne kretser slik at prosessoren skal slippe å tenke på dette. Dvs at vi har egne datastore for skriving, og synking av lesedatastore fra denne.
>”CQRS” – check !
Jeg har ikke fulgt noen prosess i dette arbeidet. Men det har blitt flere runder med bestilling av prototypbatcher som jeg så har testet. dette har gjerne ført til at jeg har funnet feil slik at jeg har måttet korrigere designet. Jeg har også kommet på nye lure ting jeg har kunnet inkorporere på kortet
>”Iterativ prosess” – check !
Den eneste måten jeg kunne justere programvaren på med noen grad av sikkerhet, var ved å lage en slags testharness med knapper og display på en diger breadboard. Når jeg trykker på en knapp, så forventer jeg at noe skal skje enten på en output-port, på et display, eller ingenting (kanskje bare medføre en state-change). Deretter har jeg prototypet programvaren i C og flashet over på kortet for å se om oppførselen nå er ihht boka.
>”TDD” – check !
Jeg har begrenset budsjett og kan ikke kaste ressurser ut av vinduet. Hverken tid eller penger. Alt jeg gjør må tilføre verdi.
>”Lean” – check !
Jeg gjør forsåvidt aldri noe før jeg må…
>”Kanban” – check !
Jeg ser nå på fungerende hardware som kjører (foreløpig delvis) generert kode på et sanntids multitaskende OS. Er så langt ganske fornøyd med resultatet, og ting begynner å snøre seg sammen i et, om jeg skal få si det selv, ganske så tight lite regime.
Men…,
det jeg lurer litt på er hvordan det hadde gått med dette prosjektet hvis jeg hadde startet ut med en intensjon om å designe denne plattformen i en tjenesteorientert arkitektur med en asynkron eventdrevet buss med idempotent prosessering av meldinger, CQRS, eventsourcing og TDD’ing av DSL en som skal kompileres til en realisering av de to forrige akronymene ?
Sannsynligvis hadde en endt opp med noe i grenseland mellom en Borg-kube og en kreftsvulst.
