0 Comments

Do prije par godina se dosta spominjao pojam RIA, kako po internetovima tako i na ovom blogu. Uglavnom je kontekst razgovora bio vezan uz razvoj podatkovno-intenzivnih aplikacija za web, bilo internet ili intranet, i preporučena tehnologija za izradu je bio Silverlight + WCF web servisi. Također, dosta o tome se dalo isto pročitati na ovom blogu. Onda se desio Bob Muglia, najavio okretanje HTML-u, ASP.NET je postao open source, težište razvoja aplikacija se prebacilo na klijentsku stranu, Microsoft je prihvatio prvo jQuery, Newtonsoft Json.Net, Knockout.JS, SignalR kao alate za izradu bogatih web aplikacija. umjesto da dalje razvija svoje verzije (da, Microsoft Ajax, UpdatePaneli i slično se ne razvija dalje, iako i dalje dolazi uz ASP.NET). Po mom skromnom mišljenju, ovo je dobar potez, s obzirom na kaos, odnosno brojnost klijentskih biblioteka koje svakodnevno niču i nestaju. Sa serverske strane situacija je jednostavna: imamo WebAPI, MVC ili nešto treće (obični ashx handler, WCF, ServiceStack, OpenRasta, …) [more]

Ako se pitate što Wellness ima sa razvojem web aplikacija, to ne bih znao, ali SPA je već druga priča. Pojam SPA je skovan da bi opisao aplikacije čija se (prezentacijska) logika izvršava u browseru, a podaci dolaze putem web servisa u JSON obliku. Aplikacija se učitava putem jedne stranica, i ta stranica se nikada ne mijenja (npr. default.aspx), a sva kompozicija elemenata na stranici se obavlja putem Javascripta i raznih HTML predložaka. I da, SPA znači Single Page Application.

SPA označava skup serverskih i klijentskih alata s kojima kreiraju web aplikacije, i nije nužno vezan za određene alate, frameworke.

Riješili smo problem wellnesa, SPA-ova, ali nisam objasnio kakve to pak sve ima veze sa ručnicima! Kada idete u Spa, toplice, na zdravstvene i kozmetičke tretmane, uvijek sa sobom uzmete ručnik. Isto tako, kada idete razvijati SPA aplikacije, onda uzmete Hot Towel!

HOT TOWEL je samo skup biblioteka i sample aplikacija na kojoj možete vidjeti kako se razne biblioteke integriraju i rješavaju poznate probleme u izradu aplikacija: bindanje na view, predlošci, navigacija, upravljanje podacima, i slično. To je dobro mjesto za početi proučavati tehnike razvoja SPA aplikacija, a kasnije se onda određene komponente mogu zamijeniti po želji, npr. umjesto KnockoutJS uzeti Backbone.JS, jer ionako odabir pojedine biblioteke ovisi više o osobnih preferencijama nego o nekim tehničkim razlozima. Ono što će te svakako susreti pri razvoju aplikacija možemo grupirati u sljedeće cjeline:

DOM manipulacija: jQuery, tu se nema nekog velikog izbora :/

Klijentski framework (ne pada mi pametniji naziv za ovu grupu): općenito, razlikujemo varijante MVC, MVVM, MVP i sličnih MVx patterna. Svi oni se brinu o upravljanju sučelja, reagiranjem na korisničke unose, prikazivanje podataka, i više, ovisno o biblioteci. ASP.NET dolazi sa KnockoutJS (napravljen od strane člana ASP.NET tima).

Modularizacija: za izradu složenije aplikacije ne možemo koristiti tonu Javascript funkcija u globalnom scopeu, moramo ih nekako organizirati u cjeline. Kako Javascript nema namespace-ove i assemblye, koristimo malo drugačiji pristup, a najpopularnija biblioteka je RequireJS, putem koje definirate svoje module, zavisne module, pozivate ih (asinkrono), i slično.

Navigacija: poznatije pod pojmom routing, omogućava nam da reagiramo na browserove back i forward tipke, pozivanje određenog stanja naše aplikacije (pogodno za bookmarkiranje). Većina frameworka ima ovo riješeno (KnockoutJS koristi sammy.js)

Perzistencija podataka: podatke svakako morate spremiti u bazu: provjeriti koji su novi dodani, koji su promijenjeni, i sukladno s time serijalizirati ih u JSON i poslati na server. Za to se brine Breeze, ali opet, ovisi o klijentskom frameworku; Backbone na primjer ima svoj način spremanja na REST web servise.

Kako početi? Za početak instalirajte Web Tools Update na VisualStudio 2012, a potom dodajte neki od SPA predloška u Visual Studio – Hot Towel, Breeze + KnockoutJSDurandal (od autora odličnog Caliburn i Caliburn.Micro Silverlight/WPF frameworka!), EmberJS, AngularJS (sa Breezon), Sve predloške možete pronaći na ovoj adresi.

Svakako preporučujem i sljedeće linkove:

Single Page Application book

Primjeri raznih JS frameworka u izradu Todo aplikacije (korisno za usporedbu)

Uživajte!

6 Comments

Moje putovanje kroz ORM alate traje dugo, počelo je onog dana kada mi je netko rekao ili pokazao da postoji bolji način rada od upotrebe SqlConnection, SqlCommand i SqlReader objekata.Tu negdje sam i upoznao DataSet-ove, kao memorijsku reprezentaciju baze podataka, sa svim tablicama i relacijama, ali nakon kratke upotrebe sam odlučio da je to krivi način rada sa c#-om. U .NET ekosustavu su se tada (cca 2005) već pojavili brojni ORM alati, i bilo je svega: od generatora koda i ogromnih konfiguracijskih XML datoteka, do malih jednostavnih frameworka. Ubrzo je i Microsoft izdao prve verzije svojih konja za trke: Linq2Sql i Entity Framework. Linq2Sql sam i koristio neko vrijeme, prvenstveno zbog svoje jednostavnosti konfiguracije i upotrebe – drag’drop baze u dizajner, i voilà, klase su spremne za upotrebu! [more]

EF v1 je nastao nad ostatcima Longhorn WinFS arhitekture i ObjectSpaces projekta, koji je trebao riješiti problem  pristupa podacima sa jedne više razine, uvesti konceptualni model koji odvaja same fizičke podatke, bili oni relacijski, fajlovi, datoteke, od njihove konzumacije putem objektnog modela.

Ali ono što je trebao raditi, pristupati SQL bazi, radio je vrlo osrednje, blago rečeno. Sa verzije 1 se skočilo na verziju 4 i EF je postao upotrebljiv alat. Ja sam i dalje koristio neke druge ORM alate, jer nisam htio koristiti pregeneriran kod koji je u EF4 slučaju za malo veću bazu rastao na tisuće i tisuće linija koda, a dizajner  postaje neupotrebljiv.

EF 4.3 je konačno ponudio pravi Code-First pristup: na osnovu klasa entiteta i kontexta bio je u stanju kreirati bazu, upite, i puniti objekte sa podacima iz baze, sve na osnovu konvencija.  Upravo ono što se i zahtjeva od jednog ORM alata. EF 5 je ubrzo donio poboljšanja: korištenje enum tipova, spacijalnih tipova i nemalo povećanje brzine. Da stvar bude još bolja, EF 5 je izdan pod Apache licencom, a izvorni kod je dostupan na Codeplexu!

EF 5 omogućava i izradu migracijskih (DDL) skripti: svaka promjena sheme baze je izvedena pomoću skripte. Za kreiranje baze dovoljno je pokrenuti slijedno sve skripte (naravno, ne ručno, ima alat za to). U bazu je također zapisana verzija, a svaka migracijska skripta predstavlja određenu verziju baze, čime se mogu izvršiti migracijske skripte između dvije specificirane verzije. Skripte nije potrebno odmah izvršiti, može se i ispisati SQL kod koji db admin potom izvrši na samoj bazi (-script flag nakon Update-Database).

Prije korištenja EF 5 potrebno je zadovoljiti neke preduvjete: za punu funkcionalnost EF 5 potrebno je koristit .NET 4.5, jer u slučaju .NET 4 nema podrške za enume, spacijalne tipove i veću brzinu izvršavanja. Stoga možemo reći da je .NET 4.5 obavezan (iako, sve .NET 4 aplikacije su kompatibilne i sa .NET 4.5, ne bi trebala postojati prepreka podizanja na novu verziju .NETa). EF 5 se sastoji od nekoliko dijelova, koji će se distribuirati nezavisno:
Jezgra:
- Core EF Runtime (System.Data.Entity.dll & System.Web.Entity.dll)
- EF Designer
Komponente (moguće su češće nadogradnje):
- DbContext API i Code First
- T4 predlošci za Model First i Database First pristup
- EF Power Tools
- Code First migracije
više o ovoj podjeli i .NET 4/4.5 razlikama možete saznati na stackoverflow pitanju

EF 5 se dodaje u projekt putem Nuget alata, pomoću GUIa ili izvršavanje  naredbe u Package Manager konzoli (konzola ima intellisense, pozivate ga sa Tab tipkom čim natipkate prvih par slova naredbe):
Install-Package EntityFramework


Za jednostavni primjer napraviti ćemo entitete za web shop: kategorije i proizvodi (oh maštovitosti!).

Da bi EF znao ispravno mapirati .NET tipove podataka (string, int, List<>, …) potrebno se pridržavati konvencija pisanja, npr. polje (property) primarnog ključa se mora zvati ID ili ProductId, iako se to može naknadno konfigurirati (putem DbContexta, migracija ili DataAnnotation atributa)

U primjeru su definirane klase Product i Category, ali i DbContext (ObjectContext klasa u EF4) koja se brine za izradu upita i praćenje promjena proptertya objekta. Virtual keyword je preporučeno dodati na kompleksne tipove da bi Lazy-Load radio.  Za korištenje migracija potrebno je uključiti ih, opet u Package Manager konzoli:

PM> Enable-Migrations
Checking if the context targets an existing database...
Code First Migrations enabled for project ConsoleApplication2.

dodati će se novi Migrations folder u projekt i Configuration.cs datoteka. Da bi kreirali našu prvu migracijsku skriptu može izgraditi samu bazu na osnovu našeg modela potrebno je pozvati naredbu Add-Migration sa nazivom prve migracije (Init u ovome slučaju):

PM> Add-Migration Init
Scaffolding migration 'Init'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration 201210301134148_Init' again.

U Migrations folder je dodana prva migracijska skripta, koja u imenu fajla sadrži timestamp, da bi se zadržao redoslijed izvršavanja. Skripta sadrži DSL kod koji će se prevesti u DDL SQL, a mi možemo slobodno modificirati, dodavati indexe, ključeve, podešavati tipove podataka:

Zadnji korak je samo pokretanje migracije i podizanje baze za posljednju verziju:

PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying code-based migrations: [201210301134148_Init].
Applying code-based migration: 201210301134148_Init.
Running Seed method.

Baza je kreirana! Ako sada promijenimo neki property (promijenimo tip podataka, dodamo property, izbrišemo ga, …) na entitetu i ponovo pokrenemo Add-Migration uočiti ćemo da je EF ispravno uočio promjene i skriptirao ih, a ukoliko nije, možemo ručno dodati u migracijsku datoteku potrebne promjene.

EF 5 omogućava vrlo jednostavnu upotrebu POCO objekata, bez konfiguracije i mapiranja možemo pripremiti naše klase za rad sa bazom u vrlo kratkom vremenu. Dodavanje migracija i njihovo izvršavanje se svodi na pokretanje dvije naredbe u konzoli (Add-Migration i Update-Database). Možda nije najmoćniji ORM (sigurno nije), ali zbog ovako jednostavne upotrebe, lagane konfiguracije mojim potrebama (convention override) ja ga upotrebljavam svakodnevno i do sada nisam imao posebnih problema u radu Smiješak s namigivanjem