Jag är inte mycket för ”renhet” i ordets religiösa mening när det gäller programmering. Jag ser inga fel i att spräcka paradigm, eller att ta genvägar, eller att rent av fulhacka om det krävs.

Men det kan vara väldigt klargörande ibland att tillämpa ett programmeringsparadigm strikt. Begränsningar föder innovation och klarar tanken. Så är det till exempel välgörande att tänka helt i REST-banor när man gör webbapplikationer. Eller att tänka ”allt är en fil” när man skriver operativsystem.

I ett tankemässigt snårigt problem jag nyligen sattes att lösa blev det klargörande att tillämpa en väldigt strikt form av OO. En intressant och effektiv arkitektur uppstod.

Dessa regler följde jag:

Metoder var antingen inspektioner eller anrop. Antingen getters, och då alltså rena getters, utan parametrar:

public String getName()

Eller så var de rena anrop, alltså metoder utan returtyp:

public void doStuff( String foo, int baz)

Detta fick till följd att en lätthanterlig och logisk objektmodell uppstod nästan av sig själv. Vill man ändra tillstånd i applikatiionen måste tillståndet bo inuti ett objekt, och det enda sättet att titta på tillståndet är att använda de rena accessormetoderna. Antingen GET eller POST alltså, om man talar HTTP.

Jag funderade över att komplettera med denna regel, (vilket jag alltså inte gjorde): Anropsmetoder får bara ta en enda parameter. Det hade fått till följd att jag tvingats modellera meddelandena mellan objekten lite tydligare.

Den andra regeln var inspirerad av rent funktionell programmering: Statiska metoder är rena funktioner och får inte anropa något annat än de objekt som kommer in i metoden. Jag tillät mig att titta på andra objekt, men inte anropa.

Resultatet blev en ren och lättförståelig modell, lätt att utöka, lätt att programmera i, trots att problemet var ganska hårigt från början.