När jag tittar ut genom fönstret är himlen färgad i en dyster grå ton. Av vattenpölarna på parkeringen ser jag att det regnar. Inget väder för varken promenader eller cykelturer. Istället får det bli en tillbakablick på ett web-utvecklingsprojekt med många nya komponenter för min del. Projektet som nu är sjösatt använde ramverket Ruby on Rails eller kort och gott RoR. En ny bekantskap för min del. Nytt var också användande av GitHub för lagring av koden.
Ramverket RoR skapades av David Heinemeier Hansson 2003. Convention over configuration är något som förknippas med RoR. Istället för att göra det mesta konfigurerbart så är mycket förutbestämt. En sådan konvention är tillämpningen av designmönstret Model-View-Controller. Databaskopplingen går via modellen. I modellen samlas också på ett enkelt och elegant sätt de kontroller som behövs för att förhindra att skräp kommer in vid skrivoperationer och uppdateringar. View:n ansvarar för det som skickas ut till användarens browser medan Controllern tar emot anropen från användaren och ser till att rätt svar skickas tillbaka. Active record är ett lager ovanpå databasen för att få funktionalitet utan att kod behöver skrivas.
Ger RoR vad det lovar, snabb utveckling? Absolut. För de enkla CRUD (create, read, update och delete) funktionerna är utvecklingstiden ett minimum. Det finns till och med möjlighet att generera nödvändig kod. Ramverket känns väl genomtänkt för grundläggande funktionalitet. Men hur väl fungerar det när kraven ökar?
Extra paket kan läggas till med så kallade gems. Jag vill lyfta fram några gems som höjt mitt omdöme om ramverket. Att få till en attraktiv och fungerade användaryta kan vara tidsödande. Både html och css är en utmaning men med bootstrap och haml förenklas arbetet. Ett gem som verkligen rekommenderas är state_machine. Uppgifter i databasen som har olika status är kandidater för implemtering. Det fina med state_machine är att allt som händer vid en statusändring kapslas in, finns på ett ställe som lätt lokaliseras.
I RoR finns också möjligheter när databastabell och vy inte har ett 1:1 förhållande. För att hantera förenklat underhåll där ett formulär uppdaterar flera tabeller finns Form Objects. Service Objects är ett annat alternativ där flera databastabeller berörs av en funktion. Svaret på frågan hur ramverket fungerar när kraven ökar blir positiv.
En browser-applikation fungerar inte utan Javascript. Förutom det standardmässiga JQuery föll valet på AngularJS. Här ställs man inför ett vägval. Ska funktionalitet ligga i Rails på serversidan eller i Angular på clientdelen. Vi begränsade Angulars uppgifter och behöll funktionaliteten på serversidan. Så här i efterhand blir omdömet att Rails och Angular inte är en helt smärtfri kombination.
Versionshanteringssystemet Git har blivit något av en branschstandard. Fungerar bra med Eclipspluginen EGit. Lagring av koden i GitHub var en positiv bekantskap. Issues som skapades i GitHub kan refereras eller stängas direkt när koden skickas in via commits.
Utvecklingsarbete består inte enbart av programmering. En väsentlig del är diskussioner om vilken funktionalitet som ska finnas och alternativa lösningar. Sitter man inte i samma lokaler blir det ytterligare en dimension som måste få sin lösning. När utvecklarna sitter utspridda ställs frågan hur alla synpunkter och infallsvinklar ska hanteras. Organiseringen av ide-fasen innan en klar issue definierats som kan läggas in i GitHub. Skype, chat, diskussionsforum och e-mail. Alternativen är många men för denna del i utvecklingskedjan saknar jag ett naturligt verktyg.