Windows-sovellusten kehittämisessä on tapahtunut merkittäviä muutoksia viime vuosina, erityisesti Microsoftin julkaistessa Windows 8:n ja Windows 10:n. Alun perin WPF-sovelluksia voitiin luoda vain C#-koodilla, mutta nykyään niiden kehittämiseen voidaan käyttää myös XAML-kieltä, joka on helpommin ymmärrettävää niin ihmisille kuin koneillekin. Visual Studio for Windows on itse asiassa rakennettu osittain WPF:llä, mikä osoittaa, kuinka merkittävä rooli WPF:llä on ollut Microsoftin sovelluskehityksessä.
Vuonna 2012 julkaistu Windows 8 esitteli Windows Store -sovellukset, jotka rajoittuivat suojauskehyksen sisälle. Vuonna 2015 Windows 10 toi markkinoille uudenlaisen konseptin, Universal Windows Platform (UWP), joka mahdollisti sovellusten kehittämisen C++:lla ja DirectX UI:lla, JavaScriptillä ja HTML:llä tai C#:lla modernin .NET:n mukautetussa haarassa. Vaikka UWP-sovellukset olivat rajoittuneet vain Windows 10:een ja 11:een, ne pystyivät toimimaan myös Xboxilla ja Windows Mixed Reality -laitteilla.
UWP:n rajoitukset johtivat monien Windows-kehittäjien kritiikkiin, sillä heillä ei ollut täyttä pääsyä järjestelmän sisäisiin API:hin. Microsoft reagoi tähän luomalla Project Reunionin ja WinUI 3:n, jotka mahdollistavat Windows-kehittäjien tuoda modernin Windows-kehityksen hyödyt WPF-sovelluksiinsa. Näin nämä sovellukset voivat hyödyntää samoja etuja ja integraatioita kuin UWP-sovellukset. Tämä aloite tunnetaan nykyään Windows App SDK:na.
Mikäli yrityksessä on edelleen käytössä vanhempia Windows Forms- ja WPF-sovelluksia, ne voivat nyt hyödyntää modernin .NET:in tarjoamia uusia ominaisuuksia, kiitos Windows Desktop Packin, joka mahdollistaa niiden ajamisen modernilla .NET:llä. Tätä mahdollisuutta hyödyntämällä monia vanhoja sovelluksia voidaan kehittää ja ylläpitää nykyisten vaatimusten mukaisiksi.
Ristiinalustojen mobiili- ja työpöytäsovellukset
Mobiilimarkkinoilla on kaksi suurta toimijaa: Apple ja Google. Molemmilla on omat ohjelmointikielet ja alustan API:t: iOS käyttää Objective C:tä tai Swiftia sekä UIKitia, kun taas Android perustuu Javaan tai Kotlinin ja Android API:in. Työpöytäsovellusten kehitys on puolestaan hajautunut kahdelle pääalustalle: Apple macOS ja Microsoft Windows. Molemmat alustat vaativat erilliset ohjelmointikielet ja API:t, kuten C++, C# ja Win32 API Windowsille.
Tämä jakautuminen on aiheuttanut haasteita kehittäjille, jotka haluaisivat luoda sovelluksia, jotka toimivat kaikilla alustoilla. Tähän ongelmaan vastaa .NET MAUI (Multi-platform App UI), joka mahdollistaa sovellusten kehittämisen kerran ja niiden ajamisen useilla mobiili- ja työpöytälaitteilla. .NET MAUI tukee monia kehitysmalleja, kuten MVVM- ja XAML-pohjaisia malleja, mutta se aikoo tulevaisuudessa lisätä myös tukea Model-View-Update (MVU)-mallille, joka muistuttaa Apple Swift UI:ta. Tämä mahdollistaa entistä joustavamman ja tehokkaamman kehitystyön eri alustoille.
Uno ja Avalonia: Vaihtoehdot .NET MAUI:lle
Microsoftin luodessa .NET MAUI:ta, monet kolmannen osapuolen kehittäjät loivat avoimen lähdekoodin aloitteita, jotka mahdollistavat ristiinalustasovellusten luomisen XAML:llä. Uno on yksi näistä aloitteista, ja se on eräänlainen alusta, joka mahdollistaa .NET-sovellusten rakentamisen ja suorittamisen useilla alustoilla. Uno-alustan avulla kehittäjät voivat käyttää 99% liiketoimintalogiikastaan ja käyttöliittymästään kaikilla alustoilla – mukaan lukien mobiili, web ja työpöytä. Uno-alusta hyödyntää Xamarin-native alustan, mutta ei Xamarin.Formsia, ja sen käyttöönotto WebAssemblyn ja Linuxin kanssa on mahdollista Mono-WASM runtime -ratkaisun avulla.
Avalonia on toinen vaihtoehto, joka keskittyy ristiinalustasovellusten kehittämiseen. Se on suunniteltu erityisesti WPF:n kaltaisten sovellusten kehittäjille, sillä se tukee monia samoja käyttöliittymäkomponentteja ja malleja. Avalonia on erityisen tehokas monimutkaisissa sovelluksissa ja se tukee kaikkia suuria alustoja. Tämä tekee siitä luotettavan työkalun niille, jotka haluavat siirtää WPF-pohjaisia sovelluksiaan monialustaisiksi.
Ohjelmointiympäristön valinta
Sovellusten kehittämiseen tarvitaan sopiva ohjelmointiympäristö. Microsoft tarjoaa useita vaihtoehtoja, kuten Visual Studio 2022 Windowsille ja Macille, Visual Studio Code sekä GitHub Codespaces. Visual Studio on paras työkalu käyttöliittymien rakentamiseen WPF- ja .NET MAUI -sovelluksille, koska se tarjoaa graafisen käyttöliittymäeditorin, kun taas Visual Studio Code tukee enemmän web-kehitystä, mutta sen tuki työpöytä- ja mobiilisovelluksille on vielä rajallista.
Visual Studio Code on kuitenkin suosittu kevyempi työkalu, joka toimii kaikilla yleisimmillä käyttöjärjestelmillä, kuten Windows, macOS ja Linux. Se on erinomainen valinta moderniin ristiinalustakehitykseen, koska sen laaja laajennustuki mahdollistaa monien ohjelmointikielien käytön. Visual Studio Code on myös suosituin IDE, ja sen valitseminen antaa kehittäjille mahdollisuuden kehittää ristiinalustasovelluksia yhdellä työkalulla.
Kehitystyön valinta on tärkeää, sillä se voi vaikuttaa koko projektin aikarajoihin ja tehokkuuteen. On hyvä pohtia, millaista sovellusta ollaan rakentamassa, ja valita siihen parhaiten sopiva kehitysympäristö ja työkalut.
Miten tutustua ASP.NET Core MVC -projektin oletussivuston rakenteeseen ja toimintaan?
ASP.NET Core MVC -projektin oletussivuston käyttäytymistä tarkastellessa on tärkeää ymmärtää sen perusrakenne ja ominaisuudet. Oletusprojekti, kuten Northwind.Mvc, tarjoaa mielenkiintoisen esimerkin siitä, miten MVC-arkkitehtuuria voidaan hyödyntää web-sovelluksessa. Tässä luvussa tarkastelemme tarkemmin, kuinka oletusprojekti toimii ja mitä elementtejä sen toiminnassa on syytä huomioida.
Aluksi kannattaa tutustua projektin asetuksiin ja määrittelyihin, kuten launchSettings.json -tiedostoon, joka säätelee projektin käynnistysasetuksia. Tämä tiedosto määrittelee käytettävät portit Kestrel-palvelimelle sekä profiilit http- ja https-protokollille. Esimerkiksi:
Tässä määritellään, että sovellus käyttää sekä HTTP- että HTTPS-protokollaa eri porteilla. Tämä mahdollistaa käyttäjille suojatun (HTTPS) ja suojattoman (HTTP) yhteyden samassa projektissa.
Kun määrittelet portit ja käynnistät projektin, voit valita Visual Studio -ympäristössä, mikä profiili otetaan käyttöön (esimerkiksi https-profiili). On myös mahdollista käynnistää sovellus komentoriviltä:
Näin pääset käsiksi verkkosovellukseen, joka toimii paikallisessa kehitysympäristössä ja on heti valmis kokeiltavaksi selaimessa. Tällöin voit huomata sivuston navigointielementit, kuten Rekisteröityminen ja Kirjautuminen, jotka mahdollistavat käyttäjien hallinnan ja autentikoinnin.
Kun tarkastellaan käyttäjien rekisteröitymisprosessia, huomaa, että oletusasetuksissa salasanojen tulee täyttää tietyt vaatimukset, kuten sisältää vähintään yksi erikoismerkki, yksi numero ja yksi iso kirjain. Rekisteröinnin jälkeen käyttäjä saa sähköpostitse vahvistuslinkin, jonka kautta rekisteröinti vahvistetaan. Tämä on olennainen osa kaksivaiheista vahvistamista, joka parantaa sovelluksen turvallisuutta.
Yksi merkittävimmistä toiminnoista on käyttäjien hallintapaneeli, johon pääsee kirjautumisen jälkeen. Tässä voit muokata tilin asetuksia, kuten puhelinnumeroa, sähköpostiosoitetta ja salasanaa, sekä ottaa käyttöön kaksivaiheisen tunnistautumisen, mikä lisää sovelluksen turvallisuutta. Lisäksi on mahdollista ladata ja poistaa henkilökohtaisia tietoja, mikä on tärkeää esimerkiksi Euroopan GDPR-lainsäädännön noudattamiseksi.
Kun tarkastellaan projektin rakennetta, on syytä huomata seuraavat tärkeät kansiot ja tiedostot:
-
Areas: Tähän kansioon sijoittuvat kaikki autentikointiin liittyvät tiedostot, kuten ne, jotka käsittelevät ASP.NET Core Identity -järjestelmää.
-
Controllers: Tässä kansiossa sijaitsevat ne C#-luokat, jotka hallinnoivat HTTP-pyyntöjä ja ohjaavat niitä oikeisiin näkymiin.
-
Models: Tämä kansio sisältää C#-luokkia, jotka kuvaavat tietomalleja, joita kontrollerit käyttävät.
-
Views: Tässä kansiossa sijaitsevat Razor-näkymät, jotka luovat dynaamisia HTML-sivuja ja yhdistävät HTML:n sekä C#-koodin.
Projektissa on myös monia muita olennaisia osia, kuten appsettings.json ja appsettings.Development.json -tiedostot, jotka mahdollistavat konfiguraation säilyttämisen ja käyttämisen ajon aikana. Ne voivat sisältää esimerkiksi tietokannan yhteysmerkit ja lokitustason asetukset.
Erityisesti huomionarvoista on, että projekti hyödyntää Entity Framework Core -tekniikkaa tietojen hallintaan ja SQLite-tietokantaa käyttäjätietojen säilyttämiseen. Tämä on olennainen osa MVC-arkkitehtuuria, sillä se mahdollistaa dynaamisen tiedon käsittelyn ja säilyttämisen.
Projektin wwwroot-kansiossa taas sijaitsevat kaikki staattiset resurssit, kuten CSS-tyylit, JavaScript-tiedostot ja kuvat, jotka muodostavat sovelluksen ulkoasun ja käytettävyyden. Tässä kansiossa voi myös olla tarvittavat tiedostot, kuten favicon.ico ja muut staattiset resurssit, joita web-sovellus käyttää.
Kokonaisuudessaan ASP.NET Core MVC -projekti tarjoaa vankan pohjan dynaamisten web-sivustojen kehittämiselle. Oletusmalli kattaa tärkeimmät toiminnot, kuten käyttäjien rekisteröitymisen, kirjautumisen, tilinhallinnan ja autentikoinnin. Lisäksi se tarjoaa hyvän pohjan verkkosovellusten turvallisuuden, käyttäjäystävällisyyden ja laajennettavuuden kehittämiseen.
Verkkosovelluksen rakenteen ymmärtäminen on olennainen askel, sillä se ei ainoastaan opeta teknisiä yksityiskohtia, vaan auttaa myös suunnittelemaan tehokkaita ja skaalautuvia ratkaisuja. Erityisesti MVC-arkkitehtuurin hallitseminen tarjoaa kehittäjälle tarvittavat työkalut monimutkaisempien verkkosovellusten rakentamiseen.
Miten kehittää sovelluksia .NET:llä eri ympäristöissä ja alustoilla
GitHub Codespaces on täysin konfiguroitu kehitysympäristö, joka perustuu Visual Studio Codeen ja jonka voi käynnistää pilvessä ja käyttää missä tahansa verkkoselaimessa. Se tukee Git-repositoryja, laajennuksia ja sisäänrakennettua komentorivikäyttöliittymää, joten voit muokata, ajaa ja testata koodia millä tahansa laitteella. Visual Studio for Mac puolestaan mahdollistaa erilaisten sovellusten kehittämisen, kuten konsolisovellusten, verkkosivustojen, web-palveluiden, työpöytä- ja mobiilisovellusten luomisen. iOS-sovellusten luominen edellyttää kuitenkin Xcodea, joka on saatavilla vain macOS:lle.
Visual Studio for Windows tarjoaa samanlaista tukea sovellusten kehittämiselle, mutta Macilla ja Windowsilla on omat eronsa, erityisesti kun kyseessä on cross-platform-sovellusten, kuten .NET MAUI -sovellusten, kehittäminen. Tässä ympäristössäkin tarvitaan macOS ja Xcode sovellusten kääntämiseen iOS-laitteille.
Kehitystyössä käyttämäni laitteet olivat HP Spectre (Intel) kannettava, Apple Silicon Mac mini (M1) ja Raspberry Pi 400 (ARM v8). Näillä laitteilla oli käytössä Visual Studio Code ja Visual Studio 2022 eri alustoilla, kuten macOS, Windows 11 ja Ubuntu 64. Erilaiset laitteet ja ohjelmistoympäristöt syventävät ymmärrystäsi kehityshaasteista, vaikka yksittäinen yhdistelmä riittääkin sovellusten ja verkkosivustojen rakentamiseen. Esimerkiksi Raspberry Pi 400:lla Ubuntu Desktop 64-bit -järjestelmässä voit oppia koodaamista C#:lla ja .NET:llä.
.NET 7 tukee useita alustoja koodin julkaisemiseen, kuten Windows 10 (versio 1607 tai uudempi), macOS Catalina (versio 10.15 tai uudempi), sekä eri Linux-jakelut (Alpine Linux, CentOS, Ubuntu jne.). Tärkeää on huomata, että vaikka voit kehittää ja käyttää koodia monilla alustoilla, koodin julkaisualusta ei rajoita kehitysympäristön valintaa. Esimerkiksi Windows ARM64 -tuki .NET 5:stä alkaen mahdollistaa kehittämisen ja julkaisemisen Windows ARM -laitteille, kuten Microsoft Surface Pro X:lle. Apple M1 Mac -laitteet tarjoavat erityisen hyvän suorituskyvyn, jos käytetään Parallels-ohjelmistoa ja Windows 11 ARM -virtuaalikonetta.
Visual Studio 2022 Windowsille on monille ammattikehittäjille tuttu työkalu, mutta Visual Studio Code on saanut valtavasti suosiota kevyempänä vaihtoehtona. Visual Studio Code on parantunut huomattavasti viime vuosina, ja sen laajennuksilla, kuten REST Client -laajennuksella, on suuri rooli erityisesti web- ja tietopalveluiden testaamisessa. Onkin suositeltavaa asentaa Visual Studio Code, vaikka käyttäisitkin Visual Studio 2022:ta pääkehitysympäristönä.
Visual Studio 2022:n asennus Windowsille on yksinkertainen prosessi, jossa valitaan kehitysympäristöön sopivat komponentit, kuten ASP.NET ja web-kehitys, .NET Multi-platform App UI -kehitys sekä Git for Windows. Visual Studio Code puolestaan on kevyempi vaihtoehto, ja sen asennusohjeet ovat selkeät. Tärkeää on myös asettaa oikeat laajennukset, kuten C#-laajennus, jotta voit aloittaa koodin kirjoittamisen ja testauksen heti.
Vaikka tämä kirja keskittyy pääasiassa Visual Studio Codeen ja sen laajennuksiin, kannattaa tutustua myös Visual Studio 2022:n mahdollisuuksiin, erityisesti jos aiot työskennellä laajempien projektejen kanssa. Visual Studio Code on loistava työkalu erityisesti kevyempään kehitystyöhön ja niihin projekteihin, joissa tarvitset nopeaa ja joustavaa ympäristöä. Visual Studio 2022 puolestaan tarjoaa monipuolisempia työkaluja ja on välttämätön, jos työskentelet suurempien ja monimutkaisempien sovellusten parissa.
Lopuksi, vaikka kehitysympäristö ja työkalut ovatkin tärkeitä, on oleellista ymmärtää, että ohjelmoinnin oppiminen ja sovellusten kehittäminen eivät riipu pelkästään työkaluista. Koko prosessi vaatii keskittymistä, ongelmanratkaisukykyä ja jatkuvaa oppimista. Erilaiset alustat ja kehitysympäristöt voivat tarjota erilaisia haasteita, mutta ne myös avaavat uusia mahdollisuuksia, jos niitä osaa hyödyntää oikein.
Miten .NET MAUI ja komponenttikirjastot voivat parantaa sovelluskehitystä?
.NET MAUI (Multi-platform App UI) on monipuolinen alusta, joka mahdollistaa sovellusten luomisen useille eri alustoille, kuten iOS, Android, Windows ja macOS. Tämä kehitysalusta on erityisesti houkutteleva, koska se yhdistää natiivien sovellusten kehittämisen hyödyt ja modernin, monialustaisen lähestymistavan. Tulevaisuudessa .NET MAUI:ta voidaan mahdollisesti käyttää myös Linux-alustoilla, mutta nykyisin se keskittyy erityisesti mobiili- ja desktop-sovelluksiin. Erilaiset komponenttikirjastot voivat suuresti helpottaa ja nopeuttaa kehitystyötä, mutta on tärkeää huomioida, että nämä kirjastot voivat vaihdella huomattavasti hinta- ja tukivaihtoehdoiltaan.
Yksi tunnetuimmista komponenttikirjastoista on DevExpress, joka tarjoaa .NET MAUI:lle ilmaisen kirjastoalustan. Tämä kirjasto tukee kuitenkin vain kahta mobiilialustaa, iOS:ia ja Androidia, eikä ole avoimen lähdekoodin. Vaikka DevExpressin tarjoama kirjasto on ilmainen, sen tarjoama tuki ja laajuus voivat olla rajallisia verrattuna muihin kaupallisiin vaihtoehtoihin. Muut .NET MAUI:n komponenttikirjastot, kuten Progress Telerik ja Syncfusion, tarjoavat laajemman tuen, mutta niiden käyttöön liittyy kustannuksia. Esimerkiksi Progress Telerikin lisenssi maksaa noin 999 dollaria yhdelle kehittäjälle, ja Syncfusionin lisenssi on vielä kalliimpi, alkaen 2495 dollarista ensimmäisen vuoden aikana. Molemmilla yrityksillä on kuitenkin tarjolla ilmaiset kokeilujaksot, mikä antaa kehittäjille mahdollisuuden tutustua ohjelmistoihin ennen päätöksen tekemistä.
Erilaiset komponenttikirjastot voivat merkittävästi parantaa tuottavuutta ja sovellusten käyttökokemusta. Nämä kirjastot tarjoavat valmiita kontrollikokoelmia, kuten painikkeita, listoja, kalentereita ja muita käyttöliittymäelementtejä, jotka voidaan liittää suoraan sovellukseen. Tämä poistaa tarpeen kirjoittaa koodia tavallisille ja usein käytetyille komponentteille, ja antaa kehittäjille mahdollisuuden keskittyä sovelluksen liiketoimintalogiikkaan ja erityisominaisuuksiin.
Komponenttikirjastojen valinta riippuu kehittäjän tarpeista, budjetista ja sovelluksen vaatimuksista. Esimerkiksi, jos sovellus on suunniteltu vain mobiililaitteille, kuten iOS:lle ja Androidille, DevExpressin ilmainen kirjasto saattaa riittää hyvin. Jos taas halutaan tukea monialustaisuutta, kuten Windows- ja macOS-sovelluksia, silloin kaupalliset kirjastot, kuten Progress Telerik ja Syncfusion, voivat olla parempia vaihtoehtoja. Vaikka maksulliset kirjastot tarjoavat kattavampaa tukea ja enemmän ominaisuuksia, on tärkeää muistaa, että avoimen lähdekoodin vaihtoehdot voivat myös olla tarpeeksi hyviä monille projekteille, erityisesti jos budjetti on rajallinen.
.NET MAUI:n ja komponenttikirjastojen käyttö mahdollistaa myös monia teknisiä haasteita, joita on hyvä ymmärtää. Esimerkiksi sovellusten kehittäminen, joka tukee useita alustoja, vaatii huolellista suunnittelua ja jatkuvaa testausta. Tärkeä osa kehitystyötä on myös se, miten sovellukset kommunikoivat muiden palveluiden ja tietovarastojen kanssa. Esimerkiksi tiedonsiirto voi tapahtua monilla eri protokollilla ja tiedonvaihtomuodoilla, kuten HTTP/1.1, HTTP/2, JSON ja XML. Vanhemmat protokollat, kuten HTTP/1.1, ovat laajasti tuettuja, mutta ne eivät ole yhtä tehokkaita suurten tietomäärien käsittelyssä verrattuna uudempiin protokolliin, kuten HTTP/2.
Kun kehitetään monialustaisia sovelluksia, on myös otettava huomioon laitteistojen erityispiirteet ja käyttöjärjestelmien rajoitukset. Esimerkiksi mobiililaitteissa on usein rajoituksia siihen, mitä laitteistoresursseja ja käyttöjärjestelmän ominaisuuksia voidaan käyttää, kuten GPS, kamera tai tiedostojen valinta. Tällöin on tärkeää hyödyntää .NET MAUI:n tarjoamia liitännäisiä ja komponentteja, jotka mahdollistavat saumattoman yhteyden eri laitteiden ja järjestelmien välillä.
Samalla on tärkeää huomioida, että vaikka .NET MAUI mahdollistaa monialustaisen kehityksen, se ei ole ainoa vaihtoehto. On olemassa muitakin työkaluja ja kirjastoja, kuten Xamarin ja React Native, jotka tarjoavat vaihtoehtoisia lähestymistapoja sovelluskehitykselle. Näiden välineiden valinta riippuu pitkälti kehittäjän henkilökohtaisista mieltymyksistä, projektin tarpeista ja vaatimuksista.
Lopuksi, vaikka komponenttikirjastot ja .NET MAUI tarjoavat monia etuja, on tärkeää olla tarkkana kehitystyön aikarajoitusten, kustannusten ja teknisten vaatimusten suhteen. Tämä voi tarkoittaa kompromisseja kirjastojen valinnassa tai jopa jossain määrin joudutaan koodaamaan tiettyjä osia itse, jos valittu kirjasto ei kata kaikkia tarpeita. Silti, jos käytetään oikein, komponenttikirjastot voivat merkittävästi nopeuttaa sovelluskehitystä ja parantaa lopputuloksen laatua.
Mikä on hallitusten ja yritysten tietoturvapolitiikan ja lehdistön rooli vuorovaikutuksessa nykypäivän digitaalisessa maailmassa?
Kuinka puuntyöstössä saavutetaan tarkkuus ja tehokkuus – käytännön lähestymistapoja
Mikä tekee tarinasta satunnaisen ja mikä suunnitelmallista?
Miten klassinen patapaisti syntyy: liemen, maustamisen ja lihan täydellinen liitto

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский