tipi di ritorno delle funzioni DAL e BLL

4

Ecco come vedo le principali differenze tra DAL e BLL:

  • Il DAL interroga direttamente il database.
  • Il DAL non crea nuove informazioni . Può eseguire complesse richieste SQL, unendo diverse tabelle, ma il risultato di tale richiesta non fornisce mai alcuna informazione che non era già presente nel database.
  • Il BLL applica una logica di business sulle informazioni del DAL per creare nuove informazioni.

Ora, mi chiedo quali tipi di dati debbano restituire le funzioni di questi livelli. Per il momento, tutte le funzioni del mio DAL restituiscono DataTable. Ma le funzioni del mio BLL restituiscono una classe o un elenco di classi che ho creato.

Ad esempio:

  • dal.getAllPortfolios () restituisce un DataTable (sto lavorando con Visual Studio), risultato di un join su più tabelle.
  • bll.getAllPortfolios () chiama dal.getAllPortfolios, ma restituisce un elenco di portfolio. Con la mia classe Portfolio pubblica che si trova nello spazio dei nomi della BLL.

A volte, la funzione BLL non applica realmente alcuna "logica aziendale" ma mappa il DataTable solo da de DAL in una classe BLL.

Mi chiedo se questo è ok. Forse tutto il lavoro di mappatura dovrebbe essere fatto dal DAL? Se questo è il caso, dove inserire le mie lezioni di mappatura personali? Nello spazio dei nomi BLL o DAL (quelle classi sono richieste nei livelli sopra la BLL)?

    
posta Yugo Amaryl 03.01.2014 - 16:12
fonte

3 risposte

4

Direi che è perfettamente accettabile, persino desiderabile. Il DAL dovrebbe solo essere Accesso ai dati - ecco perché è il livello di accesso ai dati. Il BL, d'altra parte, non dovrebbe mai interagire direttamente con il database, ma dovrebbe prendere i dati recuperati dal DAL e metterlo in un formato più consumer-friendly o sviluppatore per essere sfruttato nel codice.

Mantenendo questa separazione delle preoccupazioni, se hai mai cambiato i database (sia la struttura del database, o il tipo di database, o il server fisico stesso) è necessario solo apportare modifiche nel DAL. In generale, il DAL avrà solo metodi di base per l'esecuzione di stored procedure, query, ecc. E la restituzione di singoli valori o tabelle di dati / set di dati. Invia quelli indietro al BLL, che quindi crea gli oggetti necessari per essere consumato. Se vuoi un modo semplice (se troppo semplificato) per visualizzarlo, una Ricerca Google ha fatto apparire questa immagine:

    
risposta data 03.01.2014 - 17:18
fonte
1

Non è necessario astrarre i dati da uno strato a un altro a meno che non si verifichi 1 o più trasformazioni per inserirlo in un formato che il consumatore si aspetta.

La mappatura delle tabelle di dati alle raccolte di oggetti prima di ritornare dall'accesso ai dati è più prudente rispetto a una classe / funzione separata, a meno che i consumatori non si aspettino tipi di rendimento diversi

    
risposta data 03.01.2014 - 16:18
fonte
0

[Commenti]

Quindi, ho lasciato la mia architettura come è stata descritta nel mio primo messaggio, con il mio DAL che restituisce oggetti DataTable. Sono stato criticato per quella scelta. L'argomento era che, se diverse persone lavorano sul DAL e sul BLL, quello che lavora sul BLL avrà bisogno di più documentazione per usare gli oggetti DataTable. Questa persona non conosce il nome delle colonne nel DataTable e forse nemmeno come estrarre le informazioni da un DataTable.

    
risposta data 19.01.2014 - 15:40
fonte

Leggi altre domande sui tag