Db4o45 este un sistem de gestiune a bazelor de date obiectuale open-source46 care permite dezvoltatorilor de soluții Java și .NET să salveze și să recupereze obiectele aplicație printr-o simplă linie de cod, eliminând astfel nevoia de a crea și menține alte sisteme pentru persistarea obiectelor din domeniu prin utilizarea unor soluții gen ORM sau DAL.
Librăria reprezintă o soluție fiabilă pentru o gamă largă de sisteme informatice datorită performanței, transparenței, flexibilității și ușurinței în utilizare.
Pentru a utiliza librăria într-un mediu precum aplicațiile web ASP.NET sunt necesare două module, unul pentru server care va fi instanțiat o singură dată pe durata de viață a aplicației și unul pentru client care va fi instanțiat pentu fiecare fir de execuție. Motivul este simplu, vom deschide serverul o dată pe totă durata aplicației și el va gestiona toate cererile de la clienți, iar clienții îi păstrăm pe firele lor de execuție și ,chiar dacă din nevoia de resurse sunt închiși, o nouă cerere către server îl va redeschide.
În cele ce urmează voi prezenta câteva linii de cod din care să vă faceți o impresie a cât de simplă e utilizarea unei baze de date obiectuale prin intermediul Db4o.
Ca orice bază de date aceasta este păstrată într-un fișier. Acel fișier este stabilit de noi explicit prin cod în momentul configurării:
care suportă următoarele operații pe o clasă fictivă, spre exemplu Student :
class Student{
public int Id{get;set;}
public int Age{get;set;}
public string Name{get;set;}
}
var student = new Student{ Id=1, Name=„Example Name”, Age=20 };
objectClient.SaveOrUpdate(student);
objectClient.Commit();
// update
var newStudent = objectClient.Query( it=>it.Id == 1).Single();
newStudent.Age = 22;
objectClient.SaveOrUpdate(newStudent);
// delete
var removeStudent = objectClient.Query( it=>it.Id == 1).Single();
objectClient.Delete(removeStudent);
După cum bine se poate vedea, nu necesită nici un fel de mapare între reprezentarea clasei și ce se păstrează în baza de date. O adiție pe care varianta C# o aduce peste cea Java este crearea de interogări folosind LINQ. Acestă funcționalitate împreună cu crearea de expresii dinamic a fost folosită extensiv în cadrul proiectului pentru a separa partea de Repository de cea de interogări, în acest fel, teoretic, trecerea la altă tehnologie de persistare a datelor precum Linq2Sql47, EntityFramework48sau NHibernate, ar trebui să se realizeze cât mai ușor cu putință, fără a necesita schimbări majore ale codului cum s-ar fi întâmplat daca am fi avut un DAL sau un Repository specific pentru fiecare implementare în parte. Voi detalia într-un capitol ulterior procedeul folosit.
3.3 Librăriile MvcContrib
MvcContrib este un proiect open-source, care poate fi găsit la adresa http://www.codeplex.com/MVCContrib. Adaugă funcționalități care nu se regăsesc în Asp.NET MVC de la Microsoft. Printre aceste funcționalități cele pe care le-am utilizat au fost: extensii ale clasei HtmlHelper care este responsabilă de generarea de conținut HTML în cazul unei pagini web MVC și modului MvcContrib; FluentHtml care oferă un stil mult mai bun de utilizare a clasei de baza pentru generare de cod HTML, utilizând un API49 fluent.
3.4 Librăria FluentRegEx
Proiectul a fost inițiat de cătrea Joshua Flanagan din dorința de a promova un cod mult mai ușor de întreținut, iar expresiile regulate în ce mă privește sunt printre cele mai grele de reținut datorită modului lor oarecum arhaic de a fi declarate. Este nevoie tot timpul să rețin ce înseamnă o literă sau alta și dacă cineva trebuie să mențină acea bucată de cod după mine. Sunt foarte mari șanșele să fie nevoit să le reia procesul.
În schimb cu această librărie pot construi șablonul regulat într-un fel mult mai ușor de citit:
care de fapt se transformă în: „^\D{4}\d{4}”. Diferența este colosală mai ales dacă e nevoie să oferi codul spre mentenanță altora.
3.5 Librăria Lucene.NET
Una dintre lipsurile majorității bazelor de date este indexarea textului. Din păcate aceste construcții trebuie gestionate separat. Lucene este un motor de indexare a textului, dezvoltate ca și parte a soluțiilor integrate Apache50. Original scris în Java, Lucene.NET este o transcriere a API-ului pachet cu pachet, clasă cu clasă, metodă cu metodă din Java.
Facilitățile cu care vine aceasta librărie includ:
Scalabilitate și indexare de înaltă performanță:
20 Mb/minut pe un Pentium M 1.5 GHz;
1 Mb spațiu pe Heap;
indexarea incrementală la fel de rapidă ca și cea în lot;
mărimea unui index este de aproximativ 20-30% din dimensiunea textului.
Algoritmi de căutare eficienți, puternici și exacți:
căutarea pe bază de rang dă cele mai bune rezultate returnate prima dată;
interogări de tip: frază, expresii regulare, proximitate, rază ș.a.m.d.;
căutare după anumite câmpuri ( ex. titlu, autor, conținut);
căutare după dată;
sortare după orice câmp;
căutare după mai multe indexuri cu unificarea rezultatului;
permite updatări și căutări simultane.
3.6 Librăria BlueprintCss
Pentru oricine care a făcut web development, chiar și ca un hobby, cum a fost pentru mine, un lucru este clar și anume că încercarea de a obține un design fără tabele doar prin div-uri și CSS este foarte greu. De cele mai multe ori trebuie foarte mult exercițiu și efort pentru a obține design-uri simple.
Ei bine, am descoperit un framework pentru CSS, acesta e BlueprintCSS, oferă un cadru foarte elegant, iar condițiile pe care le impune utilizatorilor săi sunt chiar minime.
Condițiile impuse sunt următoarele:
Este nevoie ca în partea de header să se regăsească instrucțiunile care importă librăria:
În corpul documentului html voi folosi un div care are clasa setată ca fiind container, ulterior div-urile interioare vor putea folosi clase de forma „span-1”, „span-2”, „span-3”, ..., „span-24”. În modul implicit „span-24” mapează 950px. Există totuși scripturi care permit rescrierea acestor fișiere CSS pentru a permite dimensiuni mai mari sau mai mici.
Exemplu de folosire:
Welcome
Există și alte stiluri și clase disponibile, dar rareori am avut nevoie de acestea. În general îl folosesc pentru a obține pagina structurată așa cum doresc și efectul este un design din div-uri cross-browser.
Librăria oferă un mare avantaj pentru oricine face web development și nu este designer, ceea ce ne permite nouă, programatorilor de rând, să avem design-ul paginii la standardele actuale de creare a paginilor html fără prea mari probleme. Librăria este un proiect open-source care poate fi downloadat la adresa http://www.blueprintcss.org