Program JavaZone

Lyntale Torsdag 3. september

Hvordan vi temmer en domenemodell med 1500+ klasser

Room 6

Norsk 20 min Domain-Driven Design Kotlin Code Generation Graph-OOP impedance Ontology

Simen Burud

Simen er utvikler(ish) i Bouvet og jobber i skjæringspunktet mellom teknologi og elkraft.

Herman Thieme

Herman er konsulent i Bouvet og jobber i skjæringspunktet mellom programvareutvikling, data engineering og informasjonsmodellering. Han har bakgrunn fra både maskinlæring og systemutvikling, og er spesielt opptatt av hvordan teknologi kan gjøre komplekse domener enklere å forstå og jobbe med.

Vi kjenner alle til smerten i overgangen mellom relasjonsdatabaser og objekter. Skaler opp til tusenvis av klasser, relasjoner og constraints fra en internasjonal standard, og du ender med forenklinger og kode som ikke egentlig greier å uttrykke domenet skikkelig. For å strø salt i såret, innse at domenet egentlig ligner mer på en graf enn en haug tabeller.

Vi sto overfor akkurat dette. Standarden vi jobber mot er enorm, grafbasert, og skrevet for og av domeneeksperter med årevis av erfaring. For en utvikler er den nærmest uleselig. Men den er maskinlesbar. I stedet for å redusere standarden til noe en relasjonsdatabase kan håndtere, genererte vi Kotlin-kode direkte fra spesifikasjonen og bygget et tynt, fleksibelt abstrasjonslag mot grafdatabasen.

Resultatet: et felles vokabular mellom utviklere og domeneeksperter, interoperabilitet som følger standarden ut av boksen, og fordelene du forbinder med en liten håndskrevet modell, selv om standarden har tusenvis av klasser. Færre feil, raskere utvikling, og en kompilator og IDE som guider deg gjennom et domene du ikke trenger å forstå fullt ut på forhånd.

Dette er domenedrevet design slik det er ment: domenet uttrykt klart og tydelig, mens infrastruktur-koden ligger ryddig adskilt ved siden av.

Utviklere og arkitekter som jobber mot store eller komplekse domenemodeller, eller som har kjent på smerten ved å presse grafbaserte data inn i relasjonsdatabaser. Du trenger ikke kjenne til OWL eller grafdatabaser fra før, men erfaring med domenedrevet design og typesystemer i Java eller Kotlin gir mest utbytte.

  1. Event Sourcing: The Only Sane Way to Run Agentic Systems Room 8