Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Classe di astrazione del db

    Salve ragazzi! Ho molto sentito parlare delle classi di astrazione dei db ma onestamente non ho capito a che servono. Ammetto che non ne ho guardata mai nemmeno una! Ora però, sono andato a fare un giro sul sito di pear ed ho visto che anche lì ce ne sono. Qualcuno potrebbe spiegarmi a che servono e quali vantaggi se ne potrebbero trarre? Grazie mille! Ciao!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  2. #2

  3. #3
    solitamente si occupano di interpretare uno standard SQL e di riadattarlo a seconda del DB scelto al fine di scrivere una sola volta la sintassi e di poterla riutilizzare su qualunque tipo di database supportato
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    ehm ... i layer di astrazione dei database mettono a disposizione un'interfaccia unificata per l'utilizzo di più database ma non si devono occupare PER FORZA di parsare l'sql e ricostruirlo a dovere per farlo correttamente interpretare dal database che si vuol usare

    quello è un query abstraction layer che può anche essere supportato all'interno di un database abstraction layer come può anche essere esterno e cosi via

  5. #5
    Onorato di aver ricevuto le risposte da due tra quelli che considero i migliori membri del forum!
    Ho capito più o meno (ma più meno che più! ) quello che avete detto ma avrei ancora una domanda: alla fine a chi conviene usare una classe del genere? Se so che la mia applicazione girerà sempre su SQL, per esempio, la implemento ottenendone dei benefici o non mi complico la vita e lascio tutto così com'è?
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  6. #6
    mah ... io sono del parere che una classe che funzioni da wrapper per uno specifico database può essere utile principalmente per acquisire esperienza, in secondo per avere maggiore controllo e funzionalità (ad ogni query che esegui puoi eseguire statistiche, controlli, check di errori e comportarti di conseguenza invece di ripetere il codice per ogni query in tutte le pagine) ed in terzo ti può facilitare la transizione da un database ad un'altro

    in una seconda fase, appena capisci BENE, come funziona e come si comporta, ti consiglio, prima di iniziare a scrivere, di dare un'occhiata a PDO, di cui antrea ha scritto il porting per php4 e php5.0 (php5.1 supporta nativamente PDO)

    ovviamente tieni in considerazione che:
    - è un prodotto relativamente giovane
    - per eseguire operazioni comuni devi scrivere un wrapper per PDO

    per finire dai un'occhiata a come lavorano, ovvero all'interno del codice, e a cosa "esportano", ovvero quali classi e quali funzioni mettono a disposizione, i vari layer di astrazione presenti

    come terza e definitiva fase puoi benissimo scriverne uno tu

    discorso ben diverso per un sistema di astrazione per le query che, pur essendo utile in determinati casi, ovvero dove sai PER CERTO, che il tuo codice dovrà girare su diversi database, quindi sai anche a priori che potrai coprire i costi dello sviluppo di una cosa del genere vendendo il tutto a più clienti, è ben più complicato di quanto tu possa immaginare:
    - necessiti una conoscenza buona degli standard SQL 92 e 99
    - necessiti di avere una certa "flessibilità mentale" per poter adattare il tuo codice senza stravolgerlo totalmente per fargli fare tutto quello che ti serve rispettando le tue strutture su tutti i database che non supportano le funzionalità che vuoi
    - necessiti di avere un'approfondita conoscenza delle espressioni regolari e/o dei sistemi di parsing, anche se, molto spesso, conviene usare più le espressioni regolari (ti serve per ricostruire le funzionalità che usi usando un subset di funzioni messe a disposizione dal rdbms per poi reimpacchettare i dati durante l'estrazione [per espressioni regolari mi riferisco principalmente alle PCRE dato che le EREG sono infinitamente più lente, non ci sta proprio paragone]
    - TANTA pazienza
    - codice da cui prendere spunto
    - attenzione ai particolari
    - voglia di farlo



  7. #7
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    esempio pratico..
    se hai un'applicazione in mysql le chiamate minime da fare in caso di connessione ed utilizzo del db saranno:

    mysql_connect(..)
    mysql_query(..)
    mysql_fetch_row(..)

    ora immaginiamo di avere un sito di diciamo 100 pagine ke utilizzino tale sistema...

    nell'ipotesi ke volessimo migrare ad oracle o postgre le righe interessate sarebbero 300...

    poniamo invece l'ipotesi di essere scaltri come faine.. usiamo l'astrazione offerto dalle classi

    db_layer.php:
    Codice PHP:
    class db_layer{

    function 
    connect(..){
    mysql_connect
    }

    function 
    query(..){
    mysql_query(..)
    }

    function 
    fetch_row(..){
    mysql_fetch_row(..)
    }

    con un minimo di overhead includiamo l'oggetto nelle pagine e lo utilizziamo nelle 100 pag del sito:

    Codice PHP:
    require("db_layer.php");
    $db=new db_layer();
    $db->connect();
    .
    .

    adesso in caso di passaggio ad altro db quante sono le pagine da modificare? un aiutino.. la risposta prevede il singolare

    ciaone mircov!
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  8. #8
    Ok, più o meno credo di aver capito a che serve una cosa del genere ma credo anche che se non mi "sporco le mani" non capirò mai a fondo cosa voglia dire.

    Ora, quindi, credo sia il caso di scegliere una classe da poter usare: avete consigli da darmi o vado su phpclasses.org e ne scelgo una qualsiasi?
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  9. #9
    --- consiglio ---

    nello specifico, metti una sola funzione per il fetch alla quale passi un valore ... valori che definisci ed usi per mezzo di costanti standardizzate in modo che se la funzionalità è supportata la usi altrimenti ... la simuli senza però causare problemi al software ... e se non la vuoi simulare fai finta di nulla

  10. #10
    Scusa ma non credo di aver capito molto bene quello che vuoi dire! (Ca**o!!! Mi sento come quando ho cominciato con il php! )
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.