BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

IRepository ir LinqToSqlRepository klasės - SBToolkit dalis

Parašė Sergejus | 2009-06-29 21:32

Ryšium su artėjančiais Lietuvos .NET vartotojų grupės susitikimais, kur mes diskutuosime apie geriausias praktikas, papildžiau SBToolkit projektą savu repozitorijaus projektavimo šablono variantu. Apie jį pirmą kartą esu rašęs prieš metus. Per tą laiką mano repozitorijus buvo išbandytas keliuose projektuose ir ne kartą papildytas, tad pagalvojau jums gali irgi praversti ;)

SBRepository kodą rasite projekto CodePlex puslapyje.

Rodyk draugams

Vartotojų grupės susitikimai - ne vien profesionalams

Parašė Sergejus | 2009-06-28 14:20

Paskelbus apie artėjančius praktinius Lietuvos .NET vartotojų grupės susitikimus Vilniuje ir Kaune, jūsų reakcija buvo labai teigiama. Vilniuje visos vietos buvo užimtos per tris dienas nuo paskelbimo, bet Kaune iki šiol yra 15 laisvų vietų! Pabendravus su kolegomis iš Kauno paaiškėjo, kad nemažai išsigando interaktyvumo, o tiksliau jie mano kad nėra pakankamai kompetentingi. Aš noriu pasakyti tik vieną - tokie mūsų susitikimai yra pirmiausia skirti mokytis! Tad raginu nedvejoti ir registruotis kuo greičiau.

Rodyk draugams

Diakritinių ženklų šalinimas iš eilučių

Parašė Sergejus | 2009-06-25 21:24

Šiandien man prisireikė eilutėje pakeisti visas lietuviškas raides į ASCII atitikmenis (kitaip tariant, pašalinti diaktrinius ženklus). Paprasčiausias sprendimas buvo apibrėžti susiejimą (ą-a, č-c, š-s ir pan.). Bet norėjosi kažko universalesnio, pavyzdžiui, kad ä automatiškai būtų pakeista į a. Pasirodo, .NET turi pakankamai priemonių šiam uždaviniui atlikti:

Šį praplėtimo metodą jus galite rasti ir mano SBToolkit projekte.

Rodyk draugams

Straipsnių ciklas iš Entity Framework 4 - 2 dalis - pirma modelis

Parašė Sergejus | 2009-06-24 19:07

Štai ir atėjo laikas antram straipsniui iš Entity Framework 4 serijos. Šiandien aš trumpai aptarsiu kelias naujoves: „pirma modelis” ir „kompleksinės savybės”. Šiame straipsnyje aš detaliai nenagrinėsiu esybių pridėjimo ir panašių dalykų, kas nuo pirmos versijos praktiškai nepasikeitė, o susikoncentruosiu išskirtinai ties naujovių.

Pradėsime nuo tuščio duomenų modelio pridėjimo. Nors pirmoje versijoje ši galimybė jau egzistavo, praktikoje ji neveikė. Ketvirtoje Entity Framework versijoje tai yra ištaisyta.

Sukūrę tuščią duomenų modelį pasižiūrėkime ką siūlo kontekstinis meniu:

Lyginant su pirma versija, atsirado tokios galimybės kaip duomenų bazės skripto generavimas, generavimo artifakto pridėjimas, kompleksinės savybės ir daugiau.

Kas man nelabai patiko, kad šiuo metu visos eilutės pagal nutylėjimą nepalaiko Unicode, tai reikia įjungti išreikštinai:

Aš ką tik iškėliau šį klausimą EF komandai ir gavau atsakymą, kad tai yra klaida, kuri šiuo menu yra taisoma. Pagal nutylėjimą eilutės BUS Unicode.

Kaip aš jau rašiau, naujoje Entity Framework versijoje atsirado galimybė kurti ir redaguoti kompleksines savybes tiesiogiai iš interfeiso (anksčiau tam reikėjo redaguoti susiejimo failus):

Kaip matyti, aš sukūriau kompleksinę savybė Author, kurią sudaro trys laukai: Blog, Email ir Name. Aiškumo dėlei pažymėsiu, kad kompleksinės savybės duomenų bazėje saugomos kartu su esybių savybėmis, o logiškas atskyrimas yra tik koncepciniame lygmenyje:

Šiame straipsnyje aš kursiu blogo modelį, sudarytą iš trijų pagrindinių esybių: komentarai, gairės (taip, taip, Tag oficialiai verčiamas kaip gairė) ir straipsniai. Tarp straipsnių ir gairių apibrėžtas daug su daug ryšis, o tarp straipsnių ir komentarų - vienas su daug. Norėdami pagal tokį koncepcinį modelį sugeneruoti duomenų bazės schemą, užtenka iškviesti kontekstinį meniu ir jame pasirinkti atitinkamą punktą:

Šiuo metu duomenų bazės schemos generavimas yra sudarytas iš dviejų etapų: SQL sakinių generavimo ir jų vykdymo reikalingoje duomenų bazėje. Ateityje antras etapas tikriausiai bus automatizuotas.

Pasirinkus Generate Database Script from Model, atsiranda vedlys, kuriame reikia nurodyti prisijungimo eilutę ir (jeigu reikia) sukurti tuščią duomenų bazę:

Rezultate mes turime pagal modelį sugeneruotus SQL sakinius, kurie iš karto bus išsaugoti atskirame faile:

 

Sugeneruotus ir išsaugotus SQL sakinius mes galime įvykdyti reikalingoje duomenų bazėje:

Atkreipkite dėmesį į tai, kad kompleksinės savybės elementai turi prefiksą Author, o mūsų daug su daug ryšiui tarp straipsnių ir gairių bus automatiškai sukurta tarpinė lentelė PostTag. Įvykdžius šiuos SQL sakinius, duomenų bazės schema atrodys taip:

Štai ir viskas! Toks duomenų bazės schemos kūrimo būdas tikriausiai bus kritikuojamas DB administratorių, bet mums, programuotojams, jis yra žymiai intuityvesnis.

Kitame straipsnyje aš pademonstruosiu Entity Framework 4 POCO palaikymą.

Rodyk draugams

Entity Framework 4.0 Feature CTP 1

Parašė Sergejus | 2009-06-23 19:47

Savo trumpoje Entity Frarmework 4.0 apžvalgoje aš paminėjau, kad nors pirmoje beta versijoje ir nėra šablonų, skirtų generuoti POCO arba pakeitimus sekančius (self-tracking) objektus, tokia galimybė turi atsirasti. Šiandien viešai pasirodė pirmoji CTP versija Entity Framework 4.0 Feature, kurioje aukščiau išvardintus dalykus jus ir galėsite rasti.

Rodyk draugams

Registracija į .NET vartotojų grupės susitikimą Vilniuje ir Kaune atidaryta

Parašė Sergejus | 2009-06-22 19:33

Atidaryta registracija į Lietuvos .NET vartotojų grupės susitikimą #6 Vilniuje ir #3 Kaune. Primenu, šį kartą mes bandysime naują susitikimų formatą, orientuotą į pasidalijimą patirtimi - interaktyvią sesiją. Dėl šios priežasties žmonių skaičius sumažintas iki 25.

Susitikimas Vilniuje vyks liepos 1 d. nuo 17:30, o Kaune - liepos 2 d. nuo 17:30. Daugiau informacijos ir registracija DotNetGroup.lt puslapyje.

Atnaujinta

Šiandien galutinai suderinau dienotvarke:

17:30-19:30 - interaktyvioji sesija
20:00-23:00 - boulingas ir alus (Vilniuje - Cosmo, Kaune - Akropolyje)

Rodyk draugams

Straipsnių ciklas iš Entity Framework 4 - 1 dalis - apžvalga

Parašė Sergejus | 2009-06-18 21:32

Viena svarbiausių (bent jau man) Visual Studio 2010 naujovių - Entity Framework 4. Nors tikroji Entity Framework versija ir yra 2, suvienodinimui oficialiai jis vadinasi pagal .NET Framework versiją, t.y. EF 4. Verta pabrėžti, kad nors EF 1 ir buvo pozicionuojamas kaip galingesnis ORM įrankis negu LINQ to SQL, dėl savo neužbaigtumo ir elementariausių funkcijų nebuvimo, LINQ to SQL buvo naudojamas žymiai dažniau. Pirmoji versija sulaukė tikrai nemažos kritikos ir dėl to ypač džiugu, kad Microsoft rimtai pasižiūrėjo į nauja EF versiją. Šiame straipsnyje aš trumpai aprašysiu visus pasikeitimus nuo pirmos versijos, o kituose straipsniuose - išnagrinėsiu pagrindines naujoves detaliau.

Atvirai tariant, jeigu EF 1 savo projektuose aš nenorėjau naudoti (naudojau LINQ to SQL), tai 3 savaites padirbęs su EF 4 galiu teigti, kad kitas mano projektas tikriausiai naudos naują Entity Framework. Kas gi atsirado naujo?

POCO

Pagaliau! Paskutiniu metu aš esu didelis POCO (Plain Old CLR Object) proponentas, nes jų pagalba galima aprašyti saugojimui neutralias klases, kurios realiai nepriklauso nei nuo konkretaus duomenų šaltinio, nei nuo kitų sąlygų. EF 4 leidžia aprašyti EDMX modelį ir kartu su juo naudoti POCO klases.

Testuojamumas

Iki šiol, tam kad prieiti prie duomenų bazės lentelių, Entity Framework duomenų kontekste naudojo ObjectQuery<T> klasę. Dabar atsirado klasė ObjectSet<T>, kuri paveldi iš ObjectQuery<T> ir realizuoja interfeisą IObjectSet<T>. Tai reiškia, kad pagaliau testavimo metu mes galime pakeisti duomenų konteksto realizaciją.

Pirma modelis

EF 1 reikalavo egzistuojančios duomenų bazės schemos. EF 4 gi leidžia pirma sukurti verslo esybes ir sąryšius tarp jų, o tik paskui pagal tai sugeneruoti duomenų bazės schemą.

Kodo generavimas

Tiek LINQ to SQL, tiek EF 1 turėjo nemažą trūkumą - mes neturėjome būdo įtakoti generuojamo kodo. EF 4 kodo generavimui naudoja T4 (Text Template Transformation Toolkit). Kartu su Visual Studio 2010 Beta 1 yra pateikiamas vienintelis kodo generavimo šablonas, kuris naudoja ObjectSet bazines klases, bet MVP Summit metu buvo pažadėta, kad Microsoft komanda papildomai išleis POCO generavimo šabloną bei šabloną skirtą N-sluoksnių aplikacijų kūrimui.

LINQ operacijos

Kaip nebūtų keista, bet skirtingai nei LINQ to SQL, EF 1 turėjo prastą LINQ operacijų palaikymą. Taip, pavyzdžiui, nebuvo palaikomos tokios operacijos kaip Contains, DefaultIfEmpty, First, FirstOrDefault. Nuo dabar palaikomos praktiškai visos LINQ operacijos, kas leidžia testavimui naudoti ne LINQ to Entities, bet LINQ to Objects.

Lazy Loading

Sunku suvokti, bet pirmoji Entity Framework versija nepalaikė automatinio duomenų pakrovimo pagal poreikį (Lazy Loading). Laimei, tai yra sutvarkyta EF 4.

N-sluoksnių aplikacijos

Valio! Attach, Detach, automatinis esybių būsenos stebėjimas ir kiti pakeitimai. Daugiau informacijos apie tai viename iš būsimų straipsnių.

Vardų servisas

Ką LINQ to SQL mokėjo nuo pat pradžių, Entity Framework tik dabar objektų vardus paverčia į vienaskaitą, o 1:N ir N:M ryšių pavadinimus - į daugiskaitą.

Kompleksinės savybės

Ženkliai supaprastėjo darbas su EF kompleksinėmis savybėmis, kurias dabar galima kurti tiesiai iš Entity Framework grafinio redaktoriaus.

Varotojo apibrėžtos funkcijos

Taip! Pagaliau vartotojo apibrėžtos funkcijos (UDF) prieinamos tiesiai iš Entity SQL.

Šiame straipsnyje aš trumpai aprašiau visas pagrindines Entity Framework naujoves. Kitoje dalyje aš jau pereisiu prie konkrečių pavyzdžių.

Rodyk draugams

Straipsnių ciklas iš Visual Studio 2010 - 7 dalis - priklausomybių diagrama

Parašė Sergejus | 2009-06-14 21:35

Šiandien aptarsiu mano manymu vieną įdomiausių naujų Visual Studio 2010 diagramų - priklausomybių diagramą. Norint ją sukurti, pirmą reikia atidaryti Architecture Explorer langą:

Architecture Explorer leidžia naršyti po sprendimo vardų sritis, failus, klases ir jų metodus:

Šiame pavyzdyje aš nusprendžiau priklausomybių diagramos pagalba išanalizuoti Microsoft Unity programinio kodo priklausomybes. Pradžioje pradėsiu nuo vardų sričių priklausomybių. Tam tereikia pasirinkti visas vardų sritis ir paspausti mygtuką „Create a new graph“:

Kadangi Unity naudoja pakankamai daug skirtingų vardų sričių, ypač praverčia priartinimo funkcionalumas. Pažymėjus dominančią vardų sritį, jus iš karto pamatysite kas ją naudoja ir ką ji naudoja. Labai panašiai galima analizuoti klases, interfeisus ir t.t.:

Analizuojant priklausomybes būna įdomūs ne tik sąryšiai, bet ir tokia papildoma informacija kaip ar klasė yra public, ar klasė yra statinė ir pan. Šioje situacijoje pravers Legend juosta, kurios pagalba galima paspalvinti elementus pagal tam tikrus kriterijus:

Kaip matyti iš paveiksliuko, interfeisus aš paspalvinau purpurine spalva, o abstrakčias klases - mėlynai.

Pagal nutylėjimą diagramoje elementai vaizduojami iš kairės į dešinę:

Jeigu toks atvaizdavimo būdas jums atrodo nepatogus - lengvai galite jį pakeisti:

Kitas galimas atvaizdavimo būdas - išcentrinis - pagrindinis diagramos elementas randasi centre, o visi priklausomi - aplink:

Paskutinis atvaizdavimo būdas, kuris gerai žinomas visiems NDepend naudotojams ir kuris mano manymu yra vienas patogiausių analizei - matrica:

Matrica ypač patogiai leidžia išnagrinėti visas priklausomybes ir pagal tai koreguoti jūsų programos architektūrą.

Priklausomybių diagrama yra paskutinis diagramų tipas, kuris pasirodys naujame Visual Studio 2010. Kitą kartą nuo architektūros ir projektavimo pereisiu prie darbo su duomenimis, o tiksliau, prie naujojo Entity Framework 4.0, kuris gerokai ištobulėjo lyginant su senesnėmis versijomis.

Rodyk draugams

Straipsnių ciklas iš Visual Studio 2010 - 6 dalis - loginė klasių diagrama

Parašė Sergejus | 2009-06-09 22:44

Štai ir atėjo laikas aptarti paskutinį Visual Studio 2010 UML diagramos tipą - loginę klasių diagramą. Loginė klasių diagrama leidžia aprašyti klases pasitelkiant UML notaciją. Kuo gi ji skiriasi nuo Visual Studio 2008 klasių diagramos. Pirmiausia loginė klasių diagrama yra pilnai grindžiama UML notacija ir nėra pririšta prie konkrečios kalbos (C# ar Visual Basic). Kitas skirtumas, skirtingai negu klasių diagrama, loginė klasių diagrama kol kas nemoka generuoti klasių pagal UML aprašą.

Loginės klasių diagramos pridėjimas vyksta per jau gerai jums žinoma Add New Item langą:

Pridėjus loginę klasių diagramą atitinkamai pasikeičia ir įrankių juosta:

Panašiai iš kontekstinio meniu jus galite pasiekti visus reikalingus elementus:

Skirtingai negu anksčiau aptartos diagramos, loginė klasių diagrama turi pakankamai daug skirtingų nustatymų:

Įdomu tai, kad pažymėjimus diagramoje operaciją (metodą), jai galima nurodyti reikalingus parametrus bei grąžinimą tipą:

Kaip matyti, pakeitus interfeiso operacijos signatūra, automatiškai ji atsinaujino ir priklausomose klasėse.

Taigi tiek apie loginę klasių diagramą, kitą kartą aptarsiu dar vieną naują Visual Studio 2010 diagramą (šį kartą jau ne UML) - priklausomybių diagramą.

Rodyk draugams

Lietuvos .NET vartotojų grupės susitikimas - pasidalijimas gerosiomis praktikomis

Parašė Sergejus | 2009-06-06 14:22

Pagaliau pasibaigė magistrinio įtampa ir ketvirtadienį gavau magistro laipsnį. Tai reiškia, kad ir vėl galėsiu skirti daugiau laiko .NET bendruomenei. Pradėsiu nuo artėjančio .NET vartotojų grupės susitikimo.

Pastaruoju metu iš susitikimų metu pildomų feedback formų matyti, kad jums aktualios temos yra architektūra, gerosios praktikos, patirtis iš realių projektų. Temos yra labai geros, bet kaip paruošti tokį pristatymą, kuris atsakytų į jums rūpimus klausimus? Pagalvojęs, nusprendžiau pasinaudoti TechEd konferencijų patirtimi, kur būna specialios interaktyvios sesijos. Jų metu susirenka kompetentingi žmonės, pati auditorija sudaro jai aktualių klausimų ir temų sąrašą, į kuriuos ir bandoma atsakyti sesijos metu. Kuo daugiau bendravimo su auditorija (dažnai klausimų ir diskusijų formatu), tuo geresnis, įdomesnis ir, kas svarbu, naudingesnis gaunasi susitikimas.

Kaip jums tokia mintis? Jeigu palaikote, aš manau verta aptarti mažiausiai tokias temas:

  • Testuojamos ir plečiamos architektūros projektavimas (DI konteineriai, IoC, SOLID principai ir t.t.).
  • ORM panaudojimas (LINQ to SQL, Entity Framework, NHibernate), generuojamų užklausų optimizavimas.
  • Testavimas (unit testai / UI testai, testavimo patarimai).
  • ASP.NET ir ASP.NET MVC praktiniai patarimai.

Jeigu manote, kad kažko trūksta - parašykite!

Kitas svarbus dalykas, šiam susitikimui man reikia žmonių, kurie nemažai dirba su vienu iš išvardintu dalyku. Pavyzdžiui, labai reikia žmogaus, gerai išmanančio NHibernate ar WCF, kad galėtų patarti kitiems, kaip juo naudotis. Jeigu turite konkrečios patirties kokioje nors srityje (nebūtinai išvardintoje) ir galėtumėte susitikimo metu padėti atsakinėjant į klausimus - aš labai laukiu jūsų! Už pagalba suorganizuosiu kokią MS knygą ar pan.

Šio susitikimo organizavimui, aptarimui bei balsavimui yra sukurta speciali diskusija DotNetGroup.lt forume. Galite rašyti arba šio blogo komentaruose, arba tiesiogiai forume!

RAŠYKITE man!

Rodyk draugams