Dobar dio programera danas koristi Microsoftove tehnologije u kreiranju softvera. Počevši od.NET frameworka i C#-a, do SQL Servera, Windows servera …

Takav razvoj aplikacija nije jeftin, pogotovo kada koristite razne frameworke, razne tehnologije i kada to sve trebate povezati da radi. Jedna od najvećih prednosti korištenja Microsoftovih tehnologija leži upravo u tome – lakom povezivanju komponenti. No, s druge strane, licence, KAL-ovi i sve ostalo što trebate da bi vaši korisnici mogli koristiti napravljenu aplikaciju za biti prilično skupo. Mi se u ovom tekstu nećemo baviti cijenama razvoja aplikacija, nego sa novim Microsoftovim.NET Core-om koji bi trebao olakšati razvoj aplikacija, donijeti.NET platformu na OS X, odnosno macOS, te Linux.

Ono što je do jučer bilo nezamislivo, danas je stvarnost. Microsoft je shvatio da mora proširiti bazu programera, a to mogu učiniti jedino tako da se njihova tehnologija može koristiti i na drugim platformama osim na Windowsima i da razvoj bude jeftiniji. Uz to, određene komponente moraju biti open source kako bi se ti isti programeri uključili i praktički besplatno unaprijedili tu istu tehnologiju. Sa dva-tri dobra poteza Microsoft je napravio ogromnu stvar – olakšao razvoj aplikacija, ujedinio određene tehnologije, otvorio ih prema korisnicima (programerima) i proširio se na druge platforme. Zato se veselimo.NET Coreu jer je to korak u pravom smjeru.

net-framework

.NET framework

Kada je Microsoft izbacio.NET framework 2002. godine bilo je to praktički nešto novo i revolucionarno. Jedna platforma za hrpu različitih aplikacija. S.NET frameworkom ste mogli raditi desktop aplikacije, web, WPF aplikacije, Windows phone aplikacije, Silverlight … Zatim je došao.NET Compact Framework koji je bio zapravo djelić.NET frameworka i koji se koristio za programiranje manjih uređaja kao što je bio Windows Phone tada. Naravno, taj compact framework je imao svoju bazu kôda i sastojao se od runtimea, frameworka i aplikacijskog modela na vrhu. I taj pristup razvoju specifičnih aplikacija je Microsoft ponovio više puta u povijesti.

Na kraju se sve svelo na to da je.NET stvarno u pozadini svega, no za svaki uređaj ili svaku tehnologiju imate zaseban runtime, zaseban framework i zaseban aplikacijski model. A svaki taj segment je održavao drugi tim programera i oni su se razvijali zasebno, a ne skupa. To čak i nije problem jer ponekad trebate napraviti nešto zasebno i nešto specijalizirano za određenu platformu, no to ovdje nije bio izuzetak nego pravilo. Nije bilo sustavnog pristupa razvoja svake vertikale (pogledajte sliku uz tekst). Na kraju najveći problem nije bio u vertikali, nego u horizontali i onda kada ste htjeli nešto napraviti za dvije platforme. Možda to u prošlosti i nije bio toliki problem koliki je danas kada je izuzetno važno napraviti aplikaciju za više platformi. Nitko ne želi istu stvar razvijati X puta.

Dolazak portabilnih libraryja
U.NET frameworku nije bilo portabilnih libraryja niti dijeljenih projekata (engl. Shared projects). Jednostavno ste zapeli sa time da za svaku platformu ili uređaj morate imati zaseban projekt, linkane datoteke, #IF-ove i slično. Nakon toga slijedi Microsoftova izrada „contractsa“. Ideja je bila da se napravi jasno strukturirani API koji će moći koristiti sve vertikale, a vi ćete samo odabrati koju želite koristiti. Nije bila loša zamisao jer je to dalo određenih rezultata, mada ni tada sve nije funkcioniralo kako je trebalo i postojao je niz ograničenja koji nije dozvoljavao ovakav način razvoja aplikacija, no iz toga su nastali portabilni class libraryji ovog tipa.

microsoft-dotnet-core

Možete to zamisliti kao unificiranje.NET vertikala u odnosu na njihov API. To je jedno vrijeme pokrivalo većinu potreba, a time ste dobili mogućnost da kreirate library (.dll) koji možete pokrenuti na više platformi, odnosno vertikala.

Ovdje su se unificirali API-ji, umjesto da se unificirala implementacija. Trebala je postojati zajednička baza koju implementira svaka vertikala, a na „vrhu vertikale“ bi se onda nalazile neke specifične stvari ili API-ji. Uvijek biste trebali raditi neke iznimke, kao što je kod I/O operacija. Svaki uređaj ili svaka tehnologija bi morala implementirati svoj način ulaska i izlaska podataka, ali vjerujemo da to ne bi predstavljalo nikakav problem.

.NET Core

Jedini logičak korak je izrada nečeg novog, a u ovom slučaju je to.NET core. To je modularna implementacija koju je moguće koristiti u praktički svim vertikalama, na svim uređajima, open source je i možete ju koristiti na Windowsima, Linuxu i macOS-u.
Možemo reći da je.NET core zapravo odsječak.NET frameworka na kojem će se graditi određene aplikacije – Windows store aplikacije, ASP.NET 5, Windows Phone aplikacije… Možda najvažniji dio.NET Corea je BCL, odnosno Base Class Library koji je temelj za izgradnju aplikacija.

Na dnu vertikale se nalazi.NET Native Runetime i CoreCLR, zatim mali sloj Runtime adaption layer koji će raditi određene prilagodbe za aplikacije. Povrh svega na vrhu vertikale se nalaze aplikacijski modeli.

.Net core stack je izuetno modularan, agilan i otvoren, te je glavni cilj bio jednom napisati kôd koji se može koristiti svuda. Naravno da se može i kasnije nadograditi s novim vertikalama.

Za razliku od.NET frameworka, .NET core platforma će biti dostavljena korisnicima kao skup NuGet paketa. Zašto baš NuGet, a ne nešto drugo? Zato jer se većina eko sustava već nalazi ovdje i sastoji se od istih paketa, pa zašto izmišljati nešto svoje kad je ovo dovoljno dobro?

dotnet-core

Svaka komponenta u.NET Core platformi je set mnogo manjih NuGet paketa, a ne nužno 1 paket = 1 komponenta. Tada platforma ne bi bila toliko modularna i toliko agilna kao što jest sada. Vidjeti ćete i promijene u nomenklaturi. NuGet paket koji sadrži, recimo, Immutable kolekcije se neće više zvati Microsoft.Bcl.Immutable nego System.Collection.Immutable kao što se zove i Microsoftov dll. Ipak najbolje od svega je agilnost koju omogućava to što vi sada možete ažurirati bilo koji NuGet paket i on će i dalje raditi sa ostalim „starijim“ NuGet paketima, samo što će on donijeti neke nove mogućnosti. Na vama je da odlučite treba li vam taj novi NuGet paket ili ne. Referenca ionako ostaje ista.

Nadalje, pošto će.NET core biti skup NuGet paketa, gubi se razlika između „originalnih“ Microsoftovih paketa i onih koje je netko drugi napravio. Sada se sve sastoji od NuGet paketa tako da nema nikakve razlike. Biti će tu još mnogo sitnica na koje će programeri sada morati obratiti pozornost, no sve u svemu će biti mnogo lakše ažurirati projekt i dodati mu nove komponente, nego što je to bio slučaj do sada.

.NET Core platforma bazirana na NuGet paketima pretvara se polako u app-local framework. Što to znači? Modularni dizajn.NET corea osigurava da svaka aplikacija deploya samo ono što ona treba. Na taj način će se smanjiti i veličina aplikacija na serveru, svaka aplikacija će ovisiti isključivo o svojim paketima, a Microsoft trenutačno radi i na „smart sharingu“ kako bi dvije aplikacije na istoj mašini mogle dijeliti određene pakete ukoliko se radi o istima. To nije najjednostavnije za napraviti jer smo maloprije rekli da se svaki paket može ažurirati u neovisnosti o drugima i onda ukoliko dvije aplikacije dijele isti paket, moglo bi doći do konflikta. No, o tome će se Microsoft brinuti.

Ono o čemu će se još morati ekstremno brinuti je kompatibilnost. Kada se određeni NuGet paket označi kao stabilan – to je to. Nema više eksperimentiranja ili dovođenja istog u nestabilno stanje. To je vjerojatno najvažnije što svaki.net programer mora znati – kada nešto koristi može biti siguran da u narednom periodu taj paket neće izazivati nikakav konflikt.

Microsoft želi da njihovi interni timovi „posjeduju“ određene pakete i da ih kontinuirano ažuriraju, da izbacuju na tržište sigurnosne zakrpe kao i do sada i da.NET core bude „Enterprise ready“, odnosno da ga i velike kompanije koje grade softver počnu koristiti. Vjerujemo da u tome neće biti nekih problema, bez obzira što će većina kompanija koja ide u nove projekte ipak još malo pričekati. Ako ništa, barem da.NET core izađe iz zadnje testne faze. To će se dogoditi uskoro, mada već sada možete koristiti.NET core RC2 koji je dovoljno dobar za upotrebu. Kada dođe finalna verzija, samo ažurirajte taj NuGet paket i to je to.

Kao što znate,.NET core je open source projekt jer je ključno da programerska zajednica sudjeluje u tome – od code reviewa do dizajniranja dokumentacije i ispravljanja postojećih grešaka. Grešaka ima, kao i u svakom projetu, no ako programeri mogu ispraviti tu grešku onda se na to neće čekati tjednima ili mjesecima, nego danima. A to je vrlo važno danas kada, pogotovo u poslovnom svijetu, svaki dan nešto znači. Ako koristite Windows forme za kreiranje aplikacije, onda znate da neke greške postoje u komponentama već godinama i još uvijek nisu ispravljene. Vrlo vjerojatno neće ni biti. Ovdje to ne smije biti slučaj.

Sve u svemu, zadovoljni smo viđenim i onime što smo isprobali. Vjerujemo da je.NET core budućnost izgradnje aplikacija, barem kada za to koristite Microsoftove tehnologije. Ne zaboravimo da Microsoft usko surađuje sa Mono zajednicom i pokušava što prije isporučiti sve izmjene na macOS i Linux, što je ogroman plus za sve one koji koriste spomenute operativne sustave. Tamo će.NET core raditi identično, samo će način deployanja aplikacije biti malo drugačiji nego na Windowsima, ali ta razlika je gotovo zanemariva.

piše: B.P.

Komentiraj