BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

Pasibaigus vartotojų grupės susitikimams

Parašė Sergejus | 2008-12-29 09:40

Praėjusių susitikimų reziumė bei kelios mintys dėl ateinančių susitikimų DotNetGroup.lt puslapyje

Rodyk draugams

Kaip generuoti ASPX puslapius T4 pagalba

Parašė Sergejus | 2008-12-28 20:18

Jau kurį laiką aš laukiau įrankio, leidžiančio generuoti ASPX kodą pagal LINQ to SQL duomenų kontekstą ir pateiktą esybę. Šį savaitgalį man pagaliau pasibaigė kantrybė ir prisėdau pats pasirašyti tokį įrankį. Ką pasirinkti ASPX generavimui žinojau jau ir prieš tai – Text Templating Transformation Toolkit (geriau žinomas kaip T4). T4 – tai nemokamas kodo generavimo įrankis, kuris įeina į standartinį Visual Studio 2008 paketą. Tokiu būdu, bet kuris programuotojas gali generuoti ASPX kodą be jokių papildomų priemonių.


Jeigu norite sužinoti daugiau apie T4 – labai rekomenduoju blogą, skirtą išskirtinai kodo generavimui su T4. Taip pat labai rekomenduoju suinstaliuoti Clarius T4 Editor, skirtą T4 sintaksės paryškinimui.


Trumpai aptarsiu ką gi aš įgyvendinau:



  • Kiekvienai esybės savybei yra generuojamas ASPX komponentas, pavyzdžiui, CheckBox – bool tipui, TextArea – kai duomenų bazės tipas yra NvarChar(MAX), TextBox – kitais atvejais;

  • Kiekvienai savybei, kuri yra išorinis raktas generuojamas DropDownList;

  • Jeigu duomenų bazėje stulpelis yra pažymėtas kaip NOT NULL, šalia sugeneruoto ASPX komponento generuojamas RequiredFieldValidator validatorius;

  • Jeigu esybės savybė yra datos tipo – papildomai generuojamas CompareValidator su operatorium DateTypeCheck.

Taip, turint savybę City …



… bus sugeneruotas toks ASPX kodas:



Toliau tereikia nukopijuoti sugeneruotą kodą ir jį atitinkamai papildyti. Noriu pabrėžti, kad sugeneruoti esybei City aukščiau pateiktą kodą tereikėjo nurodyti kelias eilutes:



Taip pirma reikia įtraukti nuorodą į biblioteką, kurioje aprašytas mūsų LINQ to SQL duomenų kontekstas ir esybės, tada nurodyti atitinkamą duomenų kontekstą ir norimą esybę.


Taip pat noriu atkreipti dėmesį į tai, kad ASPX generavimas yra suskaidytas į du šablonus: pirmas aprašo visus generavimui reikalingus metodus bei kintamuosius, o antrasis generuojamo ASPX šabloną. Taip mano šablonas atrodo taip:




Kintamasis columns ir metodas GetControlCode yra aprašyti pirmame šablone. Abu šablonai prieinami čia.


Kas toliau? Pagal tokį patį principą galvoju generuoti sąrašų langus, dalį C# logikos. O ką jus manote apie tai?

Rodyk draugams

Kodėl typeof(IList<>).GetMethod(”Add”) == null?

Parašė Sergejus | 2008-12-23 02:11

Mano penktoje naujų C# 4.0 galimybių dalyje, komentaruose iš Dariaus sulaukiau labai įdomų klausimą. Tarkime, turime žemiau pateiktus du testavimo atvejus:



Šių testų rezultatai daugelį (ir mane) gali nustebinti:



Kodėl bandant gauti IList interfeiso metodo Add informaciją, mums grąžinamas null? Atrodytų IList interfeisas paveldi iš ICollection interfeiso, todėl privalo turėti ir visus ICollection metodus, įskaitant Add. Dėl nežinomų priežasčių, GetMethod interfeisams grąžina tik juose apibrėžtus metodus (be paveldėtų aprašų). Su klasėmis, kaip ir galima tikėtis, viskas veikia gerai. Įvykdžius žemiau pateiktą testą, gausime laukiamą rezultatą:



Paklausite ką daryti? Ilgai negalvojus parašiau tokį praplėtimo metodą (dievinu LINQ):



Jo pagalba galima padaryti tai, ką pamiršo Microsoft:



Štai ir viskas, dabar galime gauti net paveldėtus interfeiso metodus!


P.S.


Analogiškai pateiktam pavyzdžiui galima aprašyti tokius metodus kaip GetInterfaceProperty ir GetInterfaceMember.

Rodyk draugams

Cloud computing - kaip lietuviškai?

Parašė Sergejus | 2008-12-21 21:00

Šis straipsnis tapo neaktualus, skaitykite mano straipsnį Cloud Computing - debesų kompiuterija.

Kaip žinia, paskutiniu metu vis daugiau šnekama apie taip vadinamą “cloud computing”. Pagrindinė problema su kuria aš susidūriau - kaip tai versti į lietuvių kalbą? Tai tapo ypač aktualu pasirodžius Windows Azure platformai. Kol kas nieko geresnio už „skaičiavimai danguje“ sugalvoti nepavyko, todėl raginu visus komentaruose išsakyti jūsų vertimo variantus!

Rodyk draugams

Naujos C# 4.0 galimybės - 5 dalis

Parašė Sergejus | 2008-12-20 00:51

Štai ir atėjo laikas paskutiniam straipsniui iš naujų C# 4.0 galimybių apžvalgos ciklo. Šiandien norėčiau aptarti naujas bendrinių delegatų ir interfeisų kovariacijos ir kontrvariacijos galimybes.




Manau verta pradėti nuo paaiškinimo ką reiškia kovariacija ir kontrvariacija objektinėse kalbose. Tarkime, turime tokį kodą:





Tikriausiai daugelis gali paaiškinti kodėl pateiktas kodas kompiliuojasi be jokių problemų. Esmė yra tame, kad mes galime bendresniam objektui visada priskirti labiau specifinį, nes paskutinis turi visas savybes bei metodus, būdingus bendresniam objektui. Ši taisyklė ir vadinasi kovariacija (angl. covariance). Priešinga taisyklė, kai mes labiau specifiniam objektui priskiriame bendresnį objektą, vadinasi kontrvariacija (angl. contravariance).




Tai kas vis tik naujo atsirado C#, ko negalima buvo padaryti iki šiol? Jums gali būti staigmena, bet toks kodas šiuo metu nesikompiliuoja:



Atrodytų logiška, kad jeigu sąrašas saugo eilutes, tai jį galima priskirti objektų sąrašui. Problema yra tame, kad tokiu atveju yra įmanomas žemiau pateiktas kodas, kas automatiškai mus grąžina į C# 1.1 laikus:



Analogiškai, nesikompiliuoja ir toks kodas:




Geriau įvaldžius bendrybes paaiškėja, kad jeigu mes naudotume objWriter objektą tik jo reikšmių nuskaitymui, tai aukščiau pateiktas kodas būtų logiškai teisingas. Dėl šitos priežasties, aprašant interfeisą C# 4.0 leidžia išreikštinai nurodyti, kad jam gali būti taikoma kovariacija. Tai yra daroma out raktažodžio pagalba:




Jeigu kovariacijos paaiškinimas yra pakankamai paprastas, tai kontrvariacijos pavyzdį teko galvoti pakankamai ilgai. Sunku paaiškinti, kodėl bendresnio objekto priskyrimas labiau specifiniam gali būti prasmingas, bet tarkime turime tokį kodą:




Mano apibrėžtas IComparer yra pakankamai geras kontrvariacijos pavyzdys. Jeigu objComparer moka lyginti du objektus, tai jis mokės palyginti ir dvi eilutes (praktikoje taip ir vyksta palyginimas pagal nuorodą). Šiuo atveju kontrvariacija gali būti panaudota raktažodžio in pagalba:





Labai panaši situacija yra ir su bendriniais delegatais. Žemiau pateiktas kodas šiuo metu nėra kompiliuojamas:





Func – tai standartinis .NET Framework delegatas, kuris nepriima jokių argumentų ir grąžina nurodyto tipo objektą. Nesunku parašyti ekvivalentų delegatą, leidžiantį kovariaciją:





Ta pati situacija ir su kontrvariacija:



Ir vėl viskas pasikeičia raktažodžio in dėka:





Taigi tiek žinomų naujovių laukia mūsų C# 4.0. Tikiuosi šis straipsnių ciklas buvo jums naudingas ar bent informatyvus. Toliau žadu keletą straipsnių skirti Visual Studio 2010 naujovių aptarimui bei pasižiūrėti į kelias naujas ASP.NET 4.0 galimybes. Ir kaip visada, labai laukių jūsų komentarų / atsilėpimų bei nepamirškyte Patiko / Nepatiko mygtukų…

Rodyk draugams

Nauji Patiko / Nepatiko mygtukai

Parašė Sergejus | 2008-12-18 22:41

Per paskutinį Lietuvos .NET vartotojų grupės susitikimą nemažai žmonių paminėjo tokį faktą, kad mano bloge trūksta Patiko / Nepatiko mygtukų. Pagrindinis argumentas - kartais nėra ko parašyti komentaruose, o norisi kažkaip išreikšti, kad straipsnis buvo naudingas ar įdomus.


Klausydamas jūsų pasiūlymų, nuo šiol galite drąsiai reikšti savo nuomonę dėl straipsnio!


Būtų visai malonu, jeigu kiekvienas skaitytojas tai padarytų, nes taip aš galėčiau daugiau rašyti apie jus dominančius dalykus bei mokytis iš savų klaidų…

Rodyk draugams

Greitesnis Visual Studio pasikrovimas

Parašė Sergejus | 2008-12-15 19:57

Norite pora sekundžių pagreitinti Visual Studio pasikrovimo laiką? Pabandykite iškviesti DevEnv.exe su raktu /nosplash (devenv.exe /nosplash). Raktas atjungia pradinio Visual Studio lango rodymą, kas rezultate gali išsaugoti 1-2 sekundes.

Rodyk draugams

Naujos C# 4.0 galimybės - 4 dalis

Parašė Sergejus | 2008-12-14 01:47

Šį kartą aš aptarsiu dvi naujas C# 4.0 galimybes, kurios Visual Basic kalboje egzistuoja jau daugelį metų – neprivalomus parametrus ir vardinius parametrus. Tarkime, mes turime tris perkrautus metodus PrintLine kaip pavaizduota žemiau:





Metodų perkrova yra naudojama dviem tikslams: nurodyti skirtingo tipo parametrus arba suteikti tam tikriems parametrams reikšmes pagal nutylėjimą. Perkrautas metodas PrintLine – tipinis antro atvejo pavyzdys. Bandant iškviesti tokį metodą, IntelliSense parodys visas perkrovas:





Visual Basic nuo senų laikų šiems tikslams naudojo taip vadinamus neprivalomus parametrus. Nuo ketvirtos C# versijos mes galime metodo parametrams suteikti reikšmes pagal nutylėjimą, taip leidžiant juos praleisti metodo kvietimo metu:





Bandant iškviesti tokį modifikuotą PrintLine metodą, IntelliSense laužtiniuose skliaustuose parodys kurie metodai yra neprivalomi:





Svarbu pažymėti, šiuo atveju mes galime praleisti backgroundColor parametrą arba textColor ir backgroundColor parametrus, bet negalime praleisti vien parametro textColor. Kitais žodžiais, praleidžiant parametrus mes neturime pakeisti jų eiliškumo.




Ką daryti, jeigu kviečiant PrintLine mes norime perduoti tik text ir backgroundColor? Tam galima pasinaudoti kita C# 4.0 naujove – vardiniais argumentais, t.y. mes išreikštinai galime pasakyti kokiam parametrui kokią reikšmę nurodome:






Kaip galima pastebėti, vardiniai parametrai yra naudojami su neprivalomais parametrais praleidžiant kitus neprivalomus parametrus, tačiau tai nereiškia, kad mes negalime kiekvienam iš parametrų išreikštinai suteikti reikšmę:





Asmeniškai aš manau, kad reikia vengti neprivalomus ir vardinius parametrus, nes su laiku tai gali gerokai sumažinti metodo suprantamumą, ypač jeigu jūsų kodu naudosis kiti programuotojai. Nepaisant to, tinkamas jų panaudojimas gali padaryti egzistuojantį jūsų kodą aiškesniu. Pagrindinė neprivalomų ir vardinių parametrų atsiradimo priežastis – Office Interop. Kam teko programuoti su Office bibliotekomis žino, kad ten egzistuoja daug metodų su dvidešimčia ir daugiau parametrų, iš kurių tik keli yra privalomi. Iki šiol tekdavo vietoje nenaudojamų parametrų perdavinėti Type.Missing reikšmes, kas darydavo kodą sunkiai skaitomu. Neprivalomų ir vardinių parametrų panaudojimas šioje situacijoje yra tikrai sveikintinas!



Apibendrinant, noriu dar kartą pabrėžti: neprivalomi ir vardiniai parametrai yra naudingos C# 4.0 naujovės, bet jų panaudojimas turi būti tinkamas ir gerai apgalvotas.

Rodyk draugams

Microsoft išleido ASP.NET MVC grįstą blogų karkasą

Parašė Sergejus | 2008-12-10 21:47

ASP.NET MVC po truputi įgauna populiarumą. Prieš kelias dienas Microsoft paskelbė apie savo pirmą MVC pagrįstą blogų karkasą Oxite. Tai nemokamas, pagrindinį blogų funkcionalumą palaikantis karkasas, su laisvai platinamais išeities tekstais!



Internete jau galima ir gyvai pamatyti Oxite pritaikymą - MIX09 puslapį.



P.S.


Šiandien visą vakarą praleidau nagrinėdamas išeities tekstus ir kodas paliko tikrai labai teigiamą įspūdį!

Rodyk draugams

Gramatikos tikrinimas komentaruose

Parašė Sergejus | 2008-12-09 20:02

Kiek kartų teko matyti komentarus su gramatinėmis klaidomis? Tai ypač nemalonu, jeigu komentarus rašėte jus. Laimei, egzistuoja Visual Studio įskiepys, leidžiantis tikrinti gramatiką HTML, ASP.NET, C#, C/C++, JavaScript ir Visual Basic komentaruose.




Su Visual Studio 2008 SP1 suderinamą įskiepio versiją galite gauti čia.




Turint minėtą įskiepį, užtenka tiesiog iš Tools pasirinkti meniu punktą Spell Checker iš ištaisyti visas aptiktas klaidas:




Noriu pabrėžti, kad gramatikos tikrinimui yra naudojami Office 2003 / 2007 žodynai, todėl jeigu jus turite suinstaliuotą lietuvių kalbos žodyną - lietuviškų komentarų tikrinimas irgi veiks!

Rodyk draugams