BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

Microsoft Enterprise Library validavimo blokas (3 dalis)

Parašė Sergejus | 2007-10-01 22:48

Prieš kurį laiką jau esu rašęs apie Microsoft Enterprise Library validavimo bloką (I dalis, II dalis). Šiandien norėčiau parodyti validavimo bloko integravimo galimybes su ASP.NET.

Priminsiu kaip atrodė klasė Knyga:

Apibrėškime ASPX puslapį, sudarytą iš dviejų tekstinių laukų, skirtų knygos pavadinimui bei ISBN numeriui įvesti:

Tarkime, mes norime patikrinti įvestų duomenų korektiškumą, t.y. ar įvestas knygos pavadimas ir ISBN numeris atitinka anksčiau apibrėžtus reikalavimus. Pirma kas šauna į galvą - ASP.NET validatorių panaudojimas. Bet šiuo atveju reikėtų dubliuoti klasėje Knyga apibrėžtus validatorius, kas nėra labai gerai. Tokiu atveju verta pasinaudoti į Enterprise Library įeinančiu PropertyProxyValidator validatoriumi.

PropertyProxyValidator validatorius nėra pasiekiamas iš įrankių juostos, todėl norint jį pridėti reikia paspausti dešiniu pelės klavišu ant įrankių juostos, pasirinkti meniu punktą Choose Items…

… ir pažymėti PropertyProxyValidator

ASPX puslapyje reikia užregistruoti komponentą:

Dabar galima pridėti validatorių, skirtą įvesto knygos pavadinimo korektiškumui patikrinti

Pateiktame pavyzdyje ControlToValidate atributas nurodo tikrinamą komponentą; SourceTypeName - tikrinamą klasę su vardų sritimi (namespace); PropertyName - tikrinamos klasės savybės pavadinimą. Panašiai apibrėžiamas validatorius ir ISBN savybei.

Rezultate mes gauname pilnai veikiantį validavimą:

Apibendrinant, toks validavimo būdas turi savų privalumų bei trūkumų. Labai patogu, kad nereikia pakartotinai apibrėžinėti klasės apribojimų ASPX puslapyje. Tai tampa ypač svarbu turint omeny, kad panašus proxy validatorius egzistuoja ne tik ASP puslapiams, bet ir Windows formoms bei Windows Communication Foundation kontraktams. Iš kitos pusės, dėl akivaizdžių priežasčių minėtas validavimas ASP puslapiuose vyksta sukeliant PostBack įvykį, kas tikrai yra nemaža problėma šiuolaikiniame AJAX grįstame pasaulyje. Neseniai išleistas Validation Guidance Bundle bando spręsti šią problemą pakeičiant sinchroninius validatorių kreipinius į asinchroninius. Validavimo bloko integracija su ASP.NET puslapiais yra šiuo metu aktyviai plėtojama sritis, bet dar liko nemažai atvirų klausimų…

Rodyk draugams

Microsoft Enterprise Library validavimo blokas (2 dalis)

Parašė Sergejus | 2007-09-21 23:59

Praeitą kartą aš pradėjau nagrinėti Enterprise Library validavimo bloką, o šiandien, kaip ir žadėjau, parodysiu kaip tuos pačius validavimo ribojimus ir sąlygas galima apibrėžti ne tiesiogiai klasėje, bet app.config (web.config) failuose.

Pirma reikia sukurti tuščią app.config (web.config) failą ir ant jo paspausti dešiniu klavišu:

Enterprise Library patogiai integruojasi į Visual Studio aplinką, todėl vietoje rankinio failų konfigūravimo, galima pasinaudoti siūlomu Enterprise Library konfigūravimo įrankiu.

Dabar prie konfigūracijos reikia pridėti validavimo bloko sekciją

Tuščiame validavimo bloke nurodome objekto tipą (tipus), kuriam norime apibrėžti validavimo sąlygas

Pasirinktam tipui sukuriame tuščią apribojimų rinkinį ir nurodome visas savybes, kurioms apibrėšime validavimo sąlygas

Dabar belieka kiekvienai savybei nurodyti norimą validatorių (validatorius)

Tinkamai sukonfigūravus visas validavimo taisykles, app.config (web.config) failas klasei Knyga atrodys tokiu būdu:

Kada verta konfigūruoti validavimo sąlygas aprašytu metodu? Realiai egzistuoja dvi situacijos:

  • reikalavimai objektų savybių ribojimams keičiasi gana dažnai, todėl apsimoka viską turėti vienoje vietoje
  • neturime priėjimo prie klasės, kuriai norime aprašyti validavimo taisykles, kodo.

Minėtas grafinio konfigūravimo principas yra vienodas visiems Enterprise Library aplikacijų blokams, todėl ši patirtis bus naudojama ir su kitais blokais. Tikiuosi straipsnis buvo jums naudingas ir kaip visada laukiu atsiliepimų.

Rodyk draugams

Microsoft Enterprise Library validavimo blokas

Parašė Sergejus | 2007-09-19 22:32

Paskutinius keletą vakarų aš praleidau nagrinėdamas Microsoft Enterprise Library 3.1 validavimo bloką. Validamo blokas leidžia apibrėžti objektų savybių validavimo sąlygas, taip užtikrinant jų korektiškumą. Kita validavimo bloko paskirtis - atskirti validavimo sąlygų aprašymą nuo pačio validavimo proceso.

Norint pradėti naudoti validavimo bloką, pirma prie projekto reikia prijungti dvi Enterprise Library bibliotekas: Enterprise Library Shared Library ir Enterprise Library Application Block …

…bei įterpti tokį using sakinį:

Kaip pavyzdį, aš naudosiu klasę Knyga su savybėmis Pavadinimas ir ISBN:

Tarkime, iš duomenų bazės ateina tokie apribojimai laukui Pavadinimas: jis negali būti NULL bei jo maksimalus ilgis negali viršyti 256 simbolių. Pasinaudojant validavimo bloko validatoriais, šiuos apribojimus galima aprašyti taip:

Apribojimas laukui ISBN ateina ne iš duomenų bazės, bet iš dalykinės srities. ISBN numeriui patikrinti galima pasinaudoti reguliariųjų išraiškų validatoriumi:

Tokio objekto validavimas galėtų atrodyti taip:

Kaip matyti, Enterprise Library validavimo blokas leidžia atskirti objektų savybių validavimo sąlygas nuo tiesioginio objektų validavimo, kas padaro šį bloką vertingu daugelyje aplikacijų. Artimiausiu metu aš parodysiu kaip tuos pačius apribojimus galima apibrėžti ne pačioje klasėje, bet web.config (app.config) failuose, taip dar labiau padidinant lankstumą.

Rodyk draugams

Priėjimo prie duomenų aplikacijos bloko panaudojimas

Parašė Sergejus | 2007-07-11 23:07

Vakar aš padariau trumpą įžangą į Microsoft Enterprise Library, o nuo šiandien pradedu demonstruoti aplikacijų blokų panaudojimo pavyzdžius.

Pradėsiu nuo priėjimo prie duomenų aplikacijų bloko. Šiam tikslui aš naudosiu laisvai platinamą AdventureWorks duomenų bazę. Pirma pradėsim nuo prisijungimo eilutės, kuri mano atveju atrodo tokiu būdu:

kur EntLib - prisijungimo eilutės pavadinimas. Tam, kad pasiekti Enterprise Library priėjimo prie duomenų bloką iš C#, reikia įkelti dvi nuorodas: Microsoft.Practices.EnterpriseLibrary.Common.dll ir Microsoft.Practices.EnterpriseLibrary.Data.dll; o taip pat keletą using sakinių:

Priėjimo prie duomenų aplikacijos bloke viena svarbiausių yra Database klasė. Ji sukuria abstrakcijos lygį, leidžianti dirbti su duomenų baze neatsižvelgiant į jos tipą (Microsoft SQL, Access, Oracle ir panašiai). Database objektas kuriamas naudojant gamyklinio objekto DatabaseFactory CreateDatabase() metodą, kuris kaip argumentą priima prisijungimo eilutės pavadinimą (mūsų atveju EntLib):

AdventureWorks duomenų bazė turi lentelę Person.Contact. Aš apibrėžiau išsaugotą procedūrą, kuri grąžina asmenų vardus, pavardes, elektroninio pašto adresus ir telefono numerus. Išsaugota procedūra priima keturis neprivalomus parametrus (asmens id, vardo pradžią, pavardės pradžią ir elektroninio pašto fragmentą), kurie įgalina duomenų filtravimą.

Dabar laikas apibrėžti C# funkciją, kuri bus naudojama išsaugotos procedūros iškvietimui, jos signatūra gali būti tokia: public DataSet Sel_Persons(int? person_id, string firstname, string lastname, string email). Kadangi asmens id nėra privalomas parametras ir gali įgauti tuščią reikšmę, naudojamas nullable Int32 tipas. Database objektas turi keletą mums reikalingų metodų: GetStoredProcCommand - metodas, kuris grąžina suformuotą DbCommand objektą nurodytai išsaugotai procedūrai; AddInParameter - metodas leidžia pridėti įeities parametrą, nurodant jo vardą, duomenų tipą ir reikšmę; ExecuteDataSet - nurodytam DbCommand objektui grąžina užpildytą DataSet'ą. Taigi užbaigta funkcija atrodys tokiu būdu:

Kaip matyti, AddInParameter metodui parametro vardas perduodamas be Microsoft SQL įprasto @ sufikso. Tai yra dėl to, kad kaip ir sakiau anksčiau, Database objektas sukuria abstrakciją, leidžiančią dirbti su praktiškai bet kuria duomenų baze. Priklausomai nuo naudojamo provaiderio bus atitinkamai suformuotas ir parametro vardas. Įdomu tai, kad ExecuteDataSet metodas turi tokią perkrovą, kuri leidžia nurodyti tiek išsaugotos procedūros pavadinimą, tiek jos argumentų reikšmes (reikšmės turi eiti argumentų apibrėžimo tvarka), kas leidžia perrašyti minėtą funkciją į vieną eilutę:

Tokia funkciją veikia truputi lėčiau už pirmą, kadangi parametrų duomenų tipai yra gaunami naudojantis refleksija, bet greitaveikos skirtumas yra minimalus.

Taigi iš pateiktų elementarių pavyzdžių matyti, kad Enterprise Library priėjimo prie duomenų aplikacijos blokas yra tikrai įdomus, patogus ir naudotinas dalykas. Aš jau pradėjau jį naudoti savo projekte, o kada pradėsite jus?

Rodyk draugams

Įvadas į Microsoft Enterprise Library

Parašė Sergejus | 2007-07-10 16:19

Kadangi paskutiniu metu nemažą laiko dalį praleidau nagrinėdamas Microsoft Enterprise Library, nusprendžiau pasidalinti įspūdžiais. Bet pirma keletas faktų apie Enterprise Library:

  • Bibliotekų rinkinys sukurtas Microsoft Patterns and Practices padalinio
  • Pagrindinis bibliotekos vienetas – aplikacijų blokas
  • Aplikacijos blokai skirti dažniausių uždavinių sprendimui ir paremti šablonais bei gerosiomis praktikomis
  • Biblioteka platinama kartu su išeities kodu ir yra nemokama!

Pati Enterprise Library sudaryta iš 8 aplikacijų blokų:

  • Kešavimo
  • Kriptografijos
  • Priėjimo prie duomenų
  • Klaidų apdorojimo
  • Įvykių įrašymo
  • Taisyklių apibrėžimo
  • Saugumo
  • Validavimo

Šį kartą dėmėsį skirsiu trims aplikacijų blokams, su kuriais esu dirbęs daugiausiai, tai yra priėjimo prie duomenų, klaidų apdorojimo ir įvykių įrašymo aplikacijų blokams.

Priėjimo prie duomenų aplikacijų blokas:

  • Supaprastina priėjimą prie duomenų bazės objektų
  • Sukuria papildomą duomenų bazės abstrakciją
  • Automatiškai valdo ryšį su duomenų baze

Klaidų apdorojimo aplikacijų blokas:

  • Atskiria klaidų gaudymą nuo jų apdorojimo
  • Leidžia nusakyti klaidų apdorojimo teisykles .config faile be papildomų pakeitimų pačioje aplikacijoje
  • Nemažas pasirinkimas išanksto apibrėžtų klaidų apdorojimo taisyklių ir klaidų trasavimo galimybių
  • Lengvai praplečiamas

Įvykių įrašymo:

  • Atskiria informacijos apie įvykį kaupimą nuo konkrečios saugyklos
  • Leidžia nusakyti įvykio saugyklą bei įvykių filtrus .config faile be papildomų pakeitimų pačioje aplikacijoje
  • Lengvai praplečiamas

Kodo pavyzdžiai bus artimiausiu metu…

Rodyk draugams