Domanda

Sono davvero bloccato nella struttura a 3 livelli. Ho navigato in internet e ho trovato due terminologie "Database Abstraction Layer" e "Data Access Layer".

Quali sono le differenze tra i due?

È stato utile?

Soluzione

La mia comprensione è che uno strato di accesso ai dati in realtà non astratto il database, ma piuttosto rende le operazioni del database e Query costruzione più facile.

Per esempio, i livelli di accesso ai dati di solito hanno le API molto simili a sintassi SQL che ancora richiedono la conoscenza della struttura del database per poter scrivere:

$Users->select('name,email,datejoined')->where('rank > 0')->limit(10);

livelli di astrazione di dati sono di solito piene di ORM soffiato (Object-Relational Mapper) che teoricamente prevenire la necessità di comprendere qualsiasi struttura del database sottostante o avere alcuna conoscenza di SQL. La sintassi potrebbe essere qualcosa di simile:

Factory::find('Users', 10)->filter('rank > 0');

e tutti gli oggetti potrebbero essere completamente popolato con tutti i campi, possibilmente uniti con qualsiasi genitore o oggetti figlio se si imposta in questo modo.

Tuttavia, questa astrazione viene fornito con un prezzo. Personalmente trovo ORM è come dottrina o spingere ad essere inutile e inefficiente. Nella maggior parte dei casi un semplice strato di accesso ai dati sarà fare bene, con SQL manuale per tutto ciò che richiede una particolare attenzione, invece di dover distruggere le prestazioni della vostra applicazione per un po 'di zucchero sintattico. Questa zona è un acceso dibattito abbastanza così io non andrò in più.

Se si intende dati di base livello di astrazione, allora sarebbe qualcosa sulla falsariga di DOP, in modo che il codice può essere utilizzato per un numero maggiore di fornitori di database. DOP lavora con MySQL, PostgreSQL, e mysqli tra gli altri, credo.

Altri suggerimenti

Data Access Layer = Create, Read, Update, Delete operazioni (CRUD) specifici per il dominio applicativo

livello di astrazione dati = operazioni esegue database generico come connessioni, comandi, parametri di isolamento dalle biblioteche di dati vendor specifici e fornendo un alto livello di API per l'accesso ai dati indipendentemente dal fatto che si utilizzi MySQL, Microsoft SQL Server, Oracle, DB2, ecc ..

Da Wiki:

Data Access Layer

  

Uno strato di accesso ai dati (DAL) in software per computer, è uno strato di un   programma per computer che fornisce l'accesso semplificato ai dati memorizzati in   memorizzazione persistente di qualche tipo, come un'entità relazionale   banca dati.

     

Ad esempio, il DAL potrebbe restituire un riferimento a un oggetto (in termini   di programmazione orientata agli oggetti) completare con i suoi attributi invece   di una fila di campi da una tabella di database. Questo permette al cliente (o   dell'utente) moduli da creare con un più alto livello di astrazione. Questo   tipo di modello potrebbe essere implementato con la creazione di una classe di accesso ai dati   metodi che fanno riferimento direttamente un insieme corrispondente di database memorizzato   procedure. Un'altra implementazione potrebbe potenzialmente recuperare o scrittura   registra da o verso un file system. Il DAL nasconde questa complessità del   sottostante archivio dati dal mondo esterno.

     

Ad esempio, anziché utilizzare comandi quali inserimento, cancellazione, e   aggiornare per accedere a una tabella specifica in un database, una classe e un paio di   stored procedure potrebbero essere creati nel database. le procedure   sarebbe chiamato da un metodo all'interno della classe, che restituisce un   oggetto che contiene i valori richiesti. In alternativa, l'inserto, cancellare e   comandi di aggiornamento potrebbero essere eseguiti all'interno di funzioni semplici come   registeruser o LoginUser memorizzati all'interno dello strato di accesso ai dati.

In breve, la vostra CRUD funzionalità / logiche su oggetti di business per spingere a / trazione dallo strato Persistenza / stoccaggio ricade qui. Per la maggior parte dei casi si potrebbe desiderare proprio questo. mappatura ORM, interfacce di oggetti di business del Modello etc cadere qui.

Database Abstraction Layer

  

Uno strato di astrazione del database è un'interfaccia di programmazione delle applicazioni   che unifica la comunicazione tra un'applicazione computer e   database come SQL Server, DB2, MySQL, PostgreSQL, Oracle o   SQLite. Tradizionalmente, tutti i fornitori di database fornire il proprio   interfacciare su misura per i loro prodotti, che lascia agli   programmatore di applicazioni per implementare il codice per tutte le interfacce di database   lui o lei vorrebbe sostenere. livelli di astrazione del database riducono   la quantità di lavoro, fornendo un API coerente per lo sviluppatore e   nascondere le specifiche del database alla base di questa interfaccia il più possibile.   Esistono molti livelli di astrazione con interfacce differenti in   linguaggi di programmazione numerosi.

In sostanza, il suo un ulteriore livello di astrazione in modo che CRUD contro le interfacce indipendenti vendor e preoccuparsi meno di dettagli di implementazione di vari fornitori di database. Avrete bisogno di questo solo se si vuole sostenere più di un database. ORM, Micro ORM, involucri, classi driver generico, qualunque sia il nome è, etc che si occupa di creazione di connessione, gestione dei parametri, esecuzione ecc cadono qui. E 'solo un ulteriore livello poco prima strato Persistenza / bagagli. In 3 terminologia fila, entrambi questi livelli rientrino in una quanto non sono logicamente separati.


In sintesi, DAL è sui dati, DBAL è circa del database. DAL definisce le operazioni, dbal opera. DAL siede dietro DBAL che è appena dietro attuale Db. DAL chiama DBAL. DAL è una buona cosa da logiche di business separati (a Model) da logiche CRUD, mentre DBAL è raramente necessaria (ma mi piace). DAL è mappatura design più alto livello, DBAL è un'architettura più basso livello e di attuazione. Entrambi separa le responsabilità. ORM sono strutture massicce che fa entrambe le cose per voi. Io non sono sicuro di come si separano quando utilizza ORM. Non è necessario in quanto ORM gestire tutto ciò che per voi. Idealmente, vorrei comunque avere DAL in un unico progetto, e in un altro, che DBALAvrei semplicemente chiamo strato Persistenza poiché non v'è alcun punto nel separare Db e operazioni su di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top