Facelift voor Android development.
In de wereld van mobile development vliegen de nieuwe technologieën je om de oren. Voor ons bij Duo is het belangrijk om hiervan op de hoogte te blijven en te achterhalen welke vernieuwingen ons vooruit kunnen helpen om betere producten af te leveren. We kunnen uiteraard niet om de haverklap onze lopende projecten aanpassen om deze nieuwigheden te implementeren.
Gelukkig is er af en toe tijd voor een herziening waar dit mogelijk is, of nog beter, een volledig nieuw project waar we hier optimaal van kunnen profiteren. Voor ons laatste project liet het Android team deze kans niet liggen en vulde de app met enkele innovaties en technische hoogstandjes.
Sinds de eerste productieversie van Kotlin, een programmeertaal ontwikkeld door JetBrains, steeg de populariteit ervan zienderogen binnen de Android gemeenschap. Wij onderzochten dit Java alternatief ook maar wachtten nog af om het in onze apps te gebruiken. Toen de officiële ondersteuning van Kotlin voor Android eerder dit jaar werd aangekondigd op Google IO, maakten we de beslissing: nieuwe projecten ontwikkelen we voortaan in Kotlin.
Hoewel de gebruiker geen verschil merkt tussen een Android app geschreven in Java en een app geschreven in Kotlin, heeft deze overstap een grote impact. Kotlin biedt enkele features waar Java in tekort schoot, leest een stuk vlotter en vermijdt het schrijven van heel wat boilerplate code. Dit maakt programmeren in Kotlin een pak overzichtelijker en simpelweg veel leuker. Laten we niet vergeten, een gelukkige ontwikkelaar schrijft betere code! ;-)
Het gebruik van Kotlin gaat natuurlijk hand in hand met een bepaalde leercurve. Dit vormde slechts een kleine drempel voor onze developers omdat beide talen zoveel gemeenschappelijk hebben. Daarnaast kunnen de twee talen haast probleemloos naast elkaar in één applicatie werken. Dit zorgt ervoor dat we het warm water niet telkens moeten heruitvinden: we kunnen nog steeds bestaande Java libraries gebruiken en indien nodig, terugvallen op Java code.
Want laten we niet vergeten, een gelukkige ontwikkelaar schrijft betere code!
Strikte scheiding van lagen
Bij het starten van een nieuw project is het kiezen voor een goede architectuur van uiterst belang. Het is echter niet voordehandliggend om in een bestaande app hier fundamentele wijzigingen toe te passen. We besloten de verschillende lagen uit onze gelaagde architectuur zeer strikt van elkaar te scheiden. Dit zorgt op sommige plaatsen voor een extra laag complexiteit, maar brengt in het eindresultaat wel vele voordelen met zich mee.
Eenmaal de architectuur op poten stond konden we eenvoudig aparte delen unit testen met onder andere Robolectric. Daarnaast konden we beter inspelen op uitbreidingen en wijzigingen. Tijdens de development van ons laatste project werden de webservices die we gebruikten soms aangepast. Dankzij de strikte scheiding van lagen, hoefden we deze aanpassingen slechts op één plaats te doen, en bleef de rest van de app werken zonder enige wijzigingen. Ook het toevoegen van een caching systeem met een lokale database gebeurde vlotjes zonder dat andere delen van de app hiervoor wijzigingen moesten doorvoeren.
JSON API
Het merendeel van onze apps zijn gelinkt aan een bepaalde webservice die relevante data in JSON-formaat aanlevert. Bij de meeste projecten beheren wij zelf deze webservice, en bouwen we deze op maat voor onze applicaties. Hierdoor vermijden we duplicate verwerking van data op de verschillende platformen, wat ons tijd en potentiële fouten uitspaart. In ons laatste project stonden we echter niet zelf in voor de webservice maar werd deze extern beheerd. De webservice volgde hier de specificatie volgens jsonapi.org.
Hoewel JSON API voor een duidelijke specificatie zorgt mochten we niet over het hoofd zien dat dit enkel zorgde voor het aanleveren van resources. We stonden dus zelf in voor de nodige verwerking van data op het toestel in plaats van dit door de server te laten doen. Wat leek op een geschenk, bleek al snel een uitdaging te worden, maar door een slimme combinatie van enkele libraries zoals Retrofit, Moshi en moshi-jsonapi creëerden we een robuuste data module die perfect in onze architectuur klikte.
Enkel door het toepassen van deze nieuwe technologieën kunnen we achterhalen welke voor ons nuttig zijn en welke niet. Het is niet altijd evident om overal zomaar mee op de kar te springen, maar door te durven experimenteren met nieuwe technologieën en architecturen komen we steeds tot projecten die overzichtelijk, onderhoudbaar en performant zijn.
Bij Duo spelen we kort op de bal en onderzoeken we regelmatig welke technologieën onze apps kunnen verbeteren. Zo streven we ernaar om mobiele app gebruikers te voorzien van een ultieme klantbeleving.