Teknologi

I Bouvet er vi flere hundre teknologer som brenner for å programmere og utforme gode, digitale løsninger. I denne bloggen utforsker vi teknologien og deler det vi finner med dere.

Fluent interface

Patternskolen del 9 – Fluent interface

I forrige del sammenlignet vi Active Record og Repository. Denne gangen skal vi nøye oss med å se på ett pattern: Fluent interface. Det er ofte et pattern man konsumerer heller enn å implementere selv. Mange er nok kjent med det fra før, f.eks. fra rammeverk som jOOQ, JMock, Linq, Moq eller jQuery. Fluent interface brukes hovedsakelig til å implementere domenespesifikke språk (DSL). Den som benytter APIet kan skrive kode som leses mer eller mindre som vanlige setninger, noe som gjør det lett å forstå koden. Med auto complete kan man også få god hjelp av IDEen til å benytte APIet.

«Setningene» man skriver kan bli ganske lange, men for enkelhets skyld fatter vi oss i korthet. Under er et eksempel på et API som verifiserer om datoer og tidspunkter er innenfor et gitt intervall fra en gitt dato. Det kan være nyttig i f.eks. enhetstester der man må forholde seg til datoer, men ikke trenger absolutte verdier. Eksempler i C#:

Implementasjon

Det vanlige er å implementere vha. method chaining. Man følger et metodekall med et nytt metodekall, adskilt med punktum (som i eksempelet over).

Returverdien fra en metode eller property i kjeden angir neste metode/property. Ofte er returverdien den samme som for forrige metode. En void-metode avslutter metodekjeden. Det vanlige er å bruke metoder når du skal angi en verdi og for å avslutte rekken av kall. Properties kan brukes når man ikke trenger å angi verdier.

Merk at Fluent interface er mer enn bare method chaining. APIet må «flyte» som lesbare setninger når du benytter det.

Under er den fullstendig implementasjon av eksempelet over. Først en extension method som starter metodekjeden:

Deretter tre klasser som implementerer resten av “språket”:

Hver klasse gir den neste som returverdi og videresender alle nødvendige parametre. På denne måten utgjør hver klasse et «ord i setningen».

Ulemper

Det krever litt tankearbeid å utvikle et (godt) Fluent interface. Både for å få språket til å “flyte” godt og fordi en skal holde tunga rett i munnen for å få alle klassene til å henge sammen i komplekse APIer.

En annen utfordring er hvis man må mocke et Fluent interface for enhetstesting. En risikerer å måtte mocke hver eneste klasse/metode i det som kan være en lang rekke av kall. Dette er både kjedelig, tidkrevende og sårbart for endringer i APIet.

Konklusjon

Fluent interface er et morsomt pattern. Det er godt egnet til å utvikle DSLer og gjør koden veldig lett å lese. Vanligvis vil man konsumere andres APIer, ofte for konfigurasjon av rammeverk. Det er ikke så ofte man implementerer det selv og det kan være litt utfordrende å programmere selve patternet. Det er tidkrevende å mocke et Fluent interface for enhetstesting.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

Magic Mirror – version 1

Introduction A while back I discovered the exciting world of “magic mirrors”. I don’t remember how or where it caught my attention, but..

DevOpsDays Oslo 2016

5.-6. september hadde eg gleden av å delta på den første norske DevOpsDays i Oslo. Her er en oppsummering av høydepunktene..

Bouvet at JavaZone 2016

This year JavaZone celebrated it’s 15th year with with 3000 attendees and over 170 sessions. As one of Norway’s premier Java..

IT years are like dogs years

One of the characteristics of the IT industry is that time works differently for us. This is challenging and fun,..

The Future of SharePoint

Den 4. mai holdt Microsoft en virtuell event om fremtiden til SharePoint, jeg fikk heldigvis anledning til å delta de..

SharePoint 2016 er på vei!

Som lovet var Microsoft ferdig med utviklingen av SharePoint Server 2016 (RTM – release to manufacturing) rett før påske, og..

En skybasert integrasjonsplattform

SAP HANA Cloud Integration SAP HANA Cloud Integration (HCI) er en skybasert integrasjonsplattform. Denne kan benyttes i stedet for SAP..

IoT Juleverksted

Tradisjonen tro var det i starten av desember tid for det årlige juleverkstedet hos Bouvet i Sandvika. Dette var tredje..

Bouvet Battle Royale – Rematch

Vår årlige fagdag ble i fjor kjørt som showdown mellom våre avdelinger som jobber med Java- og Microsoft-teknologi. Uten å..

Key takeaways fra JavaOne 2015!

JavaOne er verdens største Java-konferanse og arrangeres hvert høst i San Francisco. Her kan du oppleve foredrag fra noen av de..

Teknologi

I Bouvet er vi flere hundre teknologer som brenner for å programmere og utforme gode, digitale løsninger. I denne bloggen utforsker vi teknologien og deler det vi finner med dere.