Abstractizarea legăturii cu baza de date

July 24th, 2010 by andreit Leave a reply »

Fiind primul meu articol pe WDE o sa încep cu un exmplu mai simplu în care o sa explic modalitatea în care se poate izola baza de date, de fapt tipul bazei de date de restul logicii aplicației. Și fiindcă WDE se refera la web development o să explic tehnica folosind PHP și evident MySql. Înainte de a explica efectiv modalitatea de izolare a bazei de date trebuie să vedem care este utilitatea aceste tehnici. Să presupunem că avem un site ce interacționează masiv cu o baza de date, în mod normal am zice că nu este absolut nici-o problemă în a apela funcția mysql_query ori de câte ori este nevoie. Aparent această abordare este corectă si pare a nu crea nici un fel de probleme, însă ce se întâmplă daca de exemplu se dorește modificarea aplicației pentru a folosi un alt tip de baza de date de exmplu db2. Acest lucru ar duce evident la modificarea tuturor apelurilor mysql_query în odbc_exec (evident alți parametrii, altă ordine) fapt care ar complica foarte mult problema ( sau neacademic formulat we’re in deep sheet) . Pentru a nu avea astfel de probleme se impune abstractizarea nivelului ce realizează operații cu baza de date.

untitled

După cum se poate observa în diagrama de mai sus accesul la baza de date se va face prin intermediul metodei statice execSQL a clasei DataBinder (un apel de forma DataBinder::execSQL(”select * ….”) ). Clasa DataBinder lucrează cu interfețele IDatabaseSQLOpperation și IDatanaseConnector. Metodei setEnviorment primește ca și parametru instanțe ale claselor ce implementează interfețele IDatabaseSQLOpperation și IDatanaseConnector. Codul ce inițializează o legătură concretă cu un tip de bază de date, în cazul de față MySql este:

DataBinder::setEnviorment(

new MysqlController(new MysqlConnector(SystemBundle::$DATABASE_HOST,

SystemBundle::$DATABASE_USER,

SystemBundle::$DATABASE_PASSWORD),

SystemBundle::$DATABASE_NAME)

);

Dacă de exemplu am dori să utilizăm un alt tip de baza de date tot ce ar trebui să modificăm în codul nostru ar fi ceva de genul:

DataBinder::setEnviorment(

new DB2Controller(new DB2Connector(SystemBundle::$DATABASE_HOST,

SystemBundle::$DATABASE_USER,

SystemBundle::$DATABASE_PASSWORD),

SystemBundle::$DATABASE_NAME)

);

Evident clasele DB2Controller și DB2Connector implementează interfețele IDatabaseSQLOpperation și IDatanaseConnector.

Daca ai gasit util acest post, aboneaza-te prin e-mail.
telefon
laptop
 Scriu de pe un laptop Asus ( camera video incorporata). I-am atasat o tastatura si un mouse la USB-uri, iar uneori, Sistemul Audio imi incanta auzul, in timp ce scriu articole sau citesc lucruri interesante.
Advertisement

Leave a Reply