Geneerinen ohjelmointi helpottuu

Geneerinen ohjelmointi helpottuu

Olen aina ollut uudelleenkäytettävän koodin kannattaja. Tämä ei tarkoita open sourcea, vaan yrityksen sisällä tapahtuvaa uudelleenkäyttöä.

Olen tehnyt sovellusta, jolla voi helposti luoda lomakkeita ja bisnesgrafiikkaa eri käyttöliittymille. Tavoitteena on mahdollisimman vähän koodia, joka sitten jaetaan sovellusten kesken.

Käyttöliittymät ja palvelin voivat suorittaa komentoja. Komennoilla voidaan esimerkiksi kerätä dataa IOT-laitteista (IOT=internet of things). Komennoilla voidaan myös lähettää esimerkiksi meilejä, jos kulloinkin määritelty sääntö toteutuu.

Kaikki lomakkeet, grafiikat ja säännöt määritetään tekstipohjaisina ohjeina. Data tallettuu ohjeiden mukaan Azuren TableStorage-, Blob-, DocumentBD- tai muuhun varastoon.

Windows- ja web-sovellusten vaiherikas lähihistoria

Windows Presentation Foundation eli WPF on ollut käytössä kymmenkunta vuotta. Sen myötä saatiin uusi tapa tehdä sovelluksia. Käyttöliittymien määrittelyä voitiin tehdä XAML:n eli Extensible Application Markup Languagen avulla.

Seuraavaksi vuonna 2007 tuli uusi tapa tehdä websovelluksia selaimiin. SilverLight 1 haaroitettiin WPF 3 -versiosta.

Sen jälkeen WPF ja SilverLight kehittyivät erillisinä haaroina. Koodi ei enää ollut täysin yhteensopivaa niiden välillä.

Windows Phonen aika

Näiden vaiheiden jälkeen vuonna 2009 tuli Windows Phone 7 -versio. Se haaroitettiin SilverLight 3 -versiosta. Myöhemmin vuonna 2010 tuli WP 7.5, joka haaroitettiin SilverLight 4 versiosta.

Seuraavaksi saatiin Windows Runtime, josta viimeisin versio on 8.1. Tätä kirjoittaesa myös Windows 10 Beta on jo julkaistu.

Tämän monihaaraisen kehityksen tuloksena saatiin siis aikaiseksi viisi eri versiota XAML-pohjaisesta kehitysympäristöstä. Nämä olivat  WPF 4.5, SilverLight 5, Windows Phone 8.1 SilverLight, Windows Phone 8.1 Windows Runtime ja Windows 8.1 WinRT-tablettiversio. Versiot olivat enemmän tai vähemmän yhteensopivia.

Oma ”Universal App”

Siinä vaiheessa kun Windows Phone 7 -versio tuli, aloin tehdä  Proof of concept- eli POC-sovellusta silloin olemassa olleille erilaisille käyttöliittymille. Kyseessä oli siis ”Universal App” ennenkuin sellaista oli julkaistu.

Saamaa koodia uudelleenkäytettiin mahdollisimman paljon eri käyttöliittymissä ja palvelimella. Ensimmäinen versio oli toteutettu jakamalla lähdekoodeja eri projektien välillä.

Koodatessa projektit näyttivät normaaleilta, mutta lähdekooditiedostoja oli vain yksi. Erilaisuudet hoitettiin #ifdef-käännöslipuilla.

Tein monentyyppisiä sovelluksia samalla koodilla. Ensimmäinen versioni oli oheisen listan mukainen.
– WPF oli natiivi Windows käyttöliittymä sovellus. Asennus click once -tyyliin.
– Windows Phone 7 SilverLight -käyttöliittymä
– SilverLight Web -käyttöliittymä
– Käyttöliittymä ajettavaksi Outlookin sisällä
– Azure WCF/IIS -palvelin datan talletukseen.
– Erilaisia WCF client -projekteja
– Business logic -luokkakirjasto

Virallinen ”Universal app”

Sitten julkaistiin Portable Class Library eli PCL ja myöhemmin Universal Application. Ne olivat pieniä askelia oikeaan suuntaan.

Universal Application oli WP8.1- ja Win 8.1 -sovellukset yhdistävä uusi, projektin luomiseen tarkoitettu template. Se teki niitä samoja temppuja, joita olin tehnyt omalla sovelluksellani aiemminkin. Molemmissa oli WinRT pohjana, joten ne ovat melkein yhteensopivia.

Tässä on lista sovelluksistani kyseisessä vaiheessa.
– WPF natiivi Windows-käyttöliittymäsovellus. Asennus click once -tyyliin.
– Windows Phone 8.1 -käyttöliittymä
– SilverLight Web -käyttöliittymä
– Käyttöliittymä ajettavaksi Outlookin sisällä
– Windows 8.1 tablet -käyttöliittymä.
– Azure WCF/IIS -palvelin datan talletukseen ja websivujen ajamiseen.
– Erilaisia WCF client -projekteja
– Netduino client
– Business logic -luokkakirjasto PCL

Siirtymävaiheen ongelmia

Ongelmana tässä versiossa on tärkeiden osien yhteensopivuuden puute. Esimerkkinä voi mainita WCF:t, joista osa on perinteisiä kutsuja ja osa await-tyyppisiä. Puhelimessa vain silverlight-versio tukee WCF-kutsuja.

Bitmap-kuvien käsittely, File Picker jne. ovat erilaisia. Pienimmät erot ovat saman api-luokan erilaisissa nimiavaruuksissa. Suurin ero on siinä, että toteutus on täysin erilainen eri ympäristöissä.

On ymmärrettävää, että Microsoft haluaa hävittää eri SilverLight-versiot. Kuitenkin puhelimissa on paljon SilverLight-koodia ja sen tuki jatkuu kauan.

Selaimista tuki taitaa hävitä kokonaan. Se on sääli, sillä kehitysympäristönä XAML ja C# on paljon tuottavampi ja parempi kuin HTML ja JavaScript.

Puhelimissa ja tableteissa natiivisovellukset ovat kuitenkin parempia kuin webbipohjaiset sovellukset. Voikin otaksua, että jatkossa HTML- ja Javaskript-webbisovellusten tarve puhelimissa ja tableteissa vähenee.

Seuraava askel?

Windows 10 tuo mukanaan lupauksen todellisesta Universal App -tuesta. Mutta vain osalle toteuttamistani käyttöliittymistä.

Mikä voi muuttua Windows 10 -version myötä? Eräs kummallisuus on ollut SQL Compact -version puuttuminen WinRT-versiosta. Puhelimessa se on ollut käytettävissä. Toiveiden listalla onkin sen paluu.

WCF-tarina alkaa olemaan myös loppusuoralla.

Hahmotelma tulevasta

Millainen on sovellukseni seuraava versio, johon tulen porttaamaan koodini? Seuraavaa version hahmotan tässä vaiheessa näin.
– WPF-version voi pudottaa pois. Uudessa universal app -versiossa ikkunoiden koko on vapaasti muutettavissa.
– Windows runtime 10 -käyttöliittymä UAP
– Windows phone 10 -käyttöliittymä UAP
– Silverlight ehkä jää pois, vaikka se olisi hyvä esimerkiksi upotettuna SharePoint -sivulla.
– Outlookin kohtalosta ei vielä tietoa.
– Azure WCF/IIS -palvelin datan talletukseen.
– WCF-käyttö hiipuu ja korvaan sen web-apilla
– Netduino client todennäköisesti poistuu
– Bisneslogiikan jako clienttien ja Azuren välillä?
– XBox-käyttöliittymä
– Raspberry ym. pikkukoneet, jotka ajavat jatkossa Windows 10 -versiota (korvaa Netduinon).

Kirjoittelen lisää, kun uusi versio alkaa olemaan koossa. Odottelen innokkaasti Windows 10:n mukanaan tuomia mahdollisuuksia.

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out /  Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out /  Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out /  Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out /  Muuta )

w

Muodostetaan yhteyttä palveluun %s