Sovelluskehys

Sovelluskehys – ammattilaisen työkalu

Mitä kuuluu kokoneen ammattilaisen ohjelmistokehitystyökalupakkiin? Sofokuksen CTO Tomi Niemi kertoo, mikä on sovelluskehys ja miten sen käyttäminen helpottaa verkkopalvelujen suunnittelua ja rakentamista.

Mikä on sovelluskehys?

Sovelluskehyksen (engl. framework, software framework) tarkoitus on tehdä uusien verkkopalvelujen toteuttamisesta nopeampaa tarjoamalla valmiita sovelluskomponentteja ja käytäntöjä toteutuksen perustaksi. Sovelluskehys (tai ohjelmistokehys) ei tavallisesti ole valmis pakettiratkaisu, jota voi asennuksen jälkeen käyttää sellaisenaan vaan toimiva verkkopalvelu rakennetaan sovelluskehyksen päälle.

Senior Developer Calle Laakkonen Sofokukselta kuvailee Django-sovelluskehystä sivustolla näin:

”Django on suosittu sovelluskehys joka helpottaa Web -sovellusten luontia.  Sovelluskehys on yhtenäinen kokoelma tiettyyn aiheeseen liittyviä koodikirjastoja.  Djangon tapauksessa tämä tarkoittaa työkaluja HTML sivujen tuottamiseen, tietokannan käyttöön, ym. Djangosta löytyy kaikki mitä ohjelmoija tarvitsee jotta voi keskittyä oman koodin kirjoittamiseen ilman, että tarvitsisi rakentaa perusteita uudelleen joka sovellusta varten.”

sovelluskehys

Miksi sovelluskehys on tärkeä?

Miksei uutta verkkopalvelua rakennettaisi aina valmiin tuotteen päälle kuten WordPressin, Drupalin, Liferayn tai Magenton päälle? Tämä voikin olla järkevää , mikäli valmis alusta tarjoaa suuren osan tavoitelluista toiminnoista ja tunnistettavia räätälöintitarpeita on vähän.

Verkkopalveluiden vaatimuksia ja liiketoiminnan tavoitteita punnittaessa huomataan kuitenkin usein, että tarpeet voivat poiketa merkittävästi olemassa olevien alustatuotteiden tarjoamista teknisistä ratkaisuista. Valmiissa julkaisujärjestelmissä ja alustatuotteissa saattaa tulla mukana monia ominaisuuksia ja toimintamalleja, jotka ovat rakennettavassa palvelussa turhia. Lisäksi ne saattavat tuoda mukanaan ylimääräisiä riippuvuuksia, jotka monimutkaistavat verkkopalvelun kehittämistä.

Start-upilla voi olla täysin uudenlainen liiketoimintaidea tai ansaintalogiikkamalli, johon valmistuotteet eivät taivu joustavasti ja prosessia ei haluta muovata valmistuotteiden ehdoilla. Verkkopalvelulla voidaan haluta luoda kokonaan uudenlaista lisäarvoa käyttäjilleen tai vallata markkinoita ratkaisemalla jokin ongelma kokonaan eri tavoin kuin kilpailijat aiemmin. Tällöin perusteltu teknologiapäätös on valita parhaiten projektiin sopiva sovelluskehys ja toteuttaa uusi verkkopalvelu sen päälle.

Itse tehty pohja vai valmis sovelluskehys?

Silloin tällöin vastaan tulee yrityksillä käytössä olevia verkkopalveluja, joiden kehityksen elinkaari on alkanut vuosituhannen alkupuolelta tai vielä kauempaa. Tyypillistä tällaisille ratkaisuille on, että projektin alkumetreillä kehittäjillä ei vielä ole ollut vakiintuneita parhaita käytäntöjä ja sovelluskehykset eivät ole olleet tuttuja kehittäjille. Verkkopalvelua on näin saatettu lähteä ohjelmoimaan täysin puhtaalta pöydältä.

Huolellisesti toteutettuna tällaisissa projekteissa verkkopalvelun ympärille on saattanut kehittyä omia sovelluskehysmäisiä piirteitä valituista suunnittelumalleista riippuen. Joskus taas kasaamisessa on käytetty oikoteitä – ns. purkkaa ja laastaria – jolloin ajan myötä lopputulos on saattanut virittelyjen jälkeen muotoutua kirjavaksi tilkkutäkiksi, jota on työlästä ylläpitää. Toteutuksessa on voinut eri aikoina olla mukana useita kehittäjiä ja lähdekoodiin on päässyt kertymään käytöstä poistunutta koodia, kun versionhallintaa ei ole harjoitettu riittävän kurinalaisesti.

Ilman tällaisen ohjelmiston syvällistä yksityiskohtien tuntemista koodin ylläpito ja muutokset ovat riskialttiita – muutos yksittäiseen komponenttiin voi aiheuttaa ennustamattomia sivuvaikutuksia muualla ohjelmistossa. Jos yrityksen toiminta on keskittynyt näin rakennetun verkkopalvelun ympärille, tämä voi muodostaa suuren liiketoimintariskin – tietoturvariskeistä puhumattakaan. Entä jos palvelua kehittänyt henkilökunta sairastuu vakavasti tai vaihtaa työpaikkaa?

Sovelluskehys voi antaa turvaa tällaisissa tilanteissa. Sovelluskehyksen käytäntöjen ansiosta verkkopalvelun jatkokehitys ei ole enää tiukasti riippuvainen alkuperäisen kehittäjäporukan asiantuntemuksesta. Joskus onkin kannattavaa siirtää parasta ennen -päiväyksensä ohittaneiden verkkopalveluiden ydintoiminnallisuuksia sopivan sovelluskehyksen päälle tai jopa kirjoittaa toteutus kokonaan uusiksi.

Sovelluskehityksen käytön hyödyt

Seuraavassa on lueteltu yleisiä sovelluskehyksen tuomia etuja:

  • Kehittäminen on ripeää: valmiit ”rakennustelineet” verkkopalvelulle ja pohja yleisimmin tarvittavia toimintoja varten
  • Testaustyökalut: laadunvarmistus helpottuu
  • Valmiit kirjastot, sovelluspaketit ja tuoterungot omaan projektiin liitettäväksi: pyörää ei tarvitse keksiä uudelleen
  • Lähdekoodista tulee automaattisesti helppolukuisempaa ja itsestään dokumentoituvaa: useampien kehittäjien kytkeminen projektiin kevyempää, matala oppimiskynnys
  • Tietoturva: mm. SQL-injektioiden, XSS-hyökkäysten ja muiden yleisten uhkien torjunta
  • Yhtenäiset ohjelmointikäytännöt, standardien noudattaminen ja komponenttien uudelleenkäytettävyys

ohjelmistosuunnittelu

Sofokus Katsastus-palvelu: avaamme verkkopalvelusi pellin ja analysoimme ohjelmistosi kunnon.

Mikä sovelluskehys sopisi verkkopalvelulleni parhaiten?

Kumpi on parempi iPhone vai Android? Kuten matkapuhelimenkin valinta, myös sovelluskehyksen valitseminen on viime kädessä makuasia. Seuraavassa on esitelty yleisiä laadullisia ominaisuuksia ja toteutettavaan verkkopalveluun liittyviä spesifisiä asioita valintajoukon rajaamista varten:

Yleisiä tunnusmerkkejä laadukkaalle sovelluskehysvalinnalle

  • Aktiivisesti ylläpidetty ja laaja dokumentaatio
  • Elinkaari: riittävän kypsä ja yleisesti käytetty (tuttuja referenssejä toteutuksista)
  • Osaaminen levinnyttä, ei lukitse tilaajaa rajattuihin kehittäjäresursseihin
  • Uusia versiota julkaistaan säännöllisesti
  • Tuottelias kehittäjäyhteisö ja elinvoimainen ekosysteemi
  • Laajennusten määrä ja laatu
  • Verkkopalvelun yleiset rakennustarvikkeet sisäänrakennettuna tai liitettävissä, mm.:
    • käyttäjien ja kirjautumisen hallinta
    • kansainvälistys/lokalisointi
    • sivupohjat / template-moottori
    • MVC tai muut suunnittelumallit
    • välimuistit
    • ORM tai muu vastaava malli tietokantaoperaatioiden käsittelyyn
    • liitettävyys, REST-rajapinnat

Verkkopalvelukohtaisesti tehtäviä ratkaisuja sovelluskehysvalinnalle

  • Minkä tyyppistä verkkopalvelua ollaan rakentamassa, esim:
    • UX-painottunut reaaliaikainen yhden sivun ajax-sovellus
    • API-rajapinnat tarjoava data-orientoitunut tietovarasto
    • sisällönhallintajärjestelmä, jossa runsaasti liittymiä ulkoisiin järjestelmiin
    • vai nopeasti pystytettävä kampanjasivusto kuten kilpailu
  • Jos kehittäjäresurssit on jo valittu, mikä on tiimin preferenssi ohjelmointikielelle ja taustatekniikalle: kehittäjien osaamisen painottuminen PHP-ohjelmointikieleen tai onko julistauduttu käyttämään pelkästään esim. Microsoftin teknologioita.
  • Infrastruktuuriin liittyvät päätökset: verkkopalvelua on ajettava tuotannossa PaaS-pilvialustoilla tai sen on oltava tiivis osa jonkin järjestelmäkokonaisuuden ekosysteemiä palvelinympäristöä myöten
  • Soveltuuko lisenssimalli projektiin
  • Vaatimuksia tukevien valmiiden laajennusten saatavuus

Idean synnyttäminen konkreettiseksi verkkopalveluksi voi tapahtua lähes millä teknologialla tahansa. Kaikilla sovelluskehyksillä on omat heikkoudet ja vahvuudet.

Sofokuksessa toteutamme räätälöityjä verkkopalveluja pääasiassa Open Source pohjaisilla sovelluskehyksillä, joista voi mainita Djangon, joka on osoittautunut ilmaisuvoimaiseksi ympäristöksi sekä soveltunut erinomaisesti ratkaisemaan yleisimmät määrittelyissä tunnistetut tarpeet sisällönhallintatyökaluja ja API-laajennuksia myöten.

Poimintoja web-sovelluskehyksistä

Alle on poimittu muutamia nykyään yleisesti käytössä olevia sovelluskehyksiä:

  • Django (Python)
  • Ruby on Rails (Ruby)
  • MEAN (Node.js, varsinainen sovelluskehys teknologiapinossa: Express)
  • PHP-sovelluskehyksiä: CodeIgniter, Symfony, CakePHP, Zend, Yii
  • Java-pohjaisia kehyksiä: Scala/Lift, Groovy/Grails, Spring, Tapestry, Wicket
  • Microsoft-teknologiat: .NET / ASP.NET

Sovelluskehykset käyttävät eri ohjelmointikieliä, painottuvat ohjelmistoarkkitehtuurin eri osa-alueisiin ja ovat kehittyneet omista lähtökodistaan. Paneudutaan myöhemmissä blogeissa tarkemmin vertailemaan sovelluskehysten välisiä eroja.

Projektin onnistuminen on teknologiavalintojen ohella kiinni tietysti mm. tuotevisiosta, toteutustavoista, projektimallista ja -johtamisesta sekä markkinasta, johon verkkopalvelu toteutetaan. Hyvä toimittaja osaa suositella sopivimpia teknisiä ratkaisuja.

Tomi Niemi

Chief Technical Officer & Partner

Lue lisää aiheesta