Domanda

sto lavorando su una piccola applicazione da zero e usarlo per cercare di insegnare a me stesso di architettura e design concetti. E 'un NET 3.5, un'applicazione WPF, e sto utilizzando SQL Compact Edition come il mio archivio di dati.

sto lavorando sullo strato logica di business, e sono solo ora iniziato a scrivere il DAL. Sto solo usando SqlCeComamnds di inviare più di query semplici e SqlCeResultSet per ottenere i risultati. Sto iniziando a progettare i miei metodi di inserimento e aggiornamento, ed ecco il problema - non so il modo migliore per ottenere i dati necessari dal BLL nel DAL. Faccio a passare in un insieme generico? Ho un elenco di parametri di massa con tutti i dati per il database? Devo semplicemente passare l'oggetto business attuale (legando così il mio DAL al roba conrete nel BLL?).

Avevo pensato di usare le interfacce - semplicemente di passaggio IBusinessObjectA nel DAL, che fornisce la semplicità che sto cercando senza di me legare troppo strettamente alle attuali implementazioni. Cosa ne pensate?

È stato utile?

Soluzione

Se fossi nella tua posizione, probabilmente sarei usare LINQ to SQL per definire il mio livello di accesso ai dati - che sarà risparmiare un sacco di lavoro mantenendo tutta quella roba SqlCeFooBar e vi darò un designer (di generi) per la manutenzione database che si sarebbe altrimenti manca, usando SQL CE.

Quindi, in questo caso, probabilmente sarei paio strato logica di business piuttosto strettamente ai soggetti esposti dallo strato L2S. La giustificazione è che le entità sono gli oggetti di business, seppur privo di servizi.

probabilmente non lasciare che i soggetti ottengono il più in alto nella gerarchia, come l'interfaccia utente però. A quel livello, rende molto più senso utilizzare un modello specifico per la vista - soprattutto in considerazione che si sta utilizzando WPF

.

Naturalmente, tutto questo dipende dalla dimensione e dalla complessità della vostra applicazione. Sto assumendo si tratta di un'applicazione piuttosto piccola scala (utente singolo?) Dato che si sta utilizzando SQL CE.

Altri suggerimenti

Non credo che ci sia una risposta semplice alle vostre domande, perché ci sono molte opzioni a seconda delle circostanze. Ho trovato utile per leggere i due libri di seguito per aiutarmi a capire i problemi che descrivere meglio.

  • MS .NET: di un'architettura di applicazioni per le aziende (Esposito, Saltarello)
  • MS Application Architecture Guide, 2nd edition.

Il secondo libro è disponibile online. Guardate qui .

Penso che sia OK per passare l'oggetto business al Data Access Layer. Credo che il lavoro del BLL è solo quello di lavorare con i suoi oggetti, per verificare se tutte le regole vengano seguite, su ciò che può essere salvato, da chi, in quali campi, tempo, ecc

Una volta che ha fatto che dovrebbe passare al DAL, e penso che è il suo lavoro per capire come convertire quello che ha ottenuto in qualcosa che può essere mantenuta, ma non ci vorrà controllare ciò che viene persistente o leggere o da chi, sarà solo farlo. Questo potrebbe essere in avanti dritto, alla LINQ, ma se i vostri Mdoels logica non corrisponde al proprio modello di dati 1: 1, quindi il DAL dovrebbe fare tutto la conversione.

A proposito di legare il vostro DAL al roba in BLL, penso che si dovrebbe preoccupare il contrario, legando il tuo BLL al vostro DAL. Vorrei usare un'interfaccia per rappresentare il vostro DAL (come in IRepository) in questo modo si può fare il vostro BLL chiamare qualsiasi tipo di meccanismo di persistenza semplicemente cambiando il tipo di IRepository si sta usando (punti extra se si utilizza IOC: P). Le classi concrete che implementano l'IRepository sarebbe legato agli oggetti di business, ma devono sapere che cosa è che essi sono il risparmio non è vero? mentre il BLL non ha bisogno di sapere che cosa sta facendo il risparmio.

Per passare oggetto di business nel DAL è il metodo più veloce e più semplice. Si lavora a progetti di piccole dimensioni, ma hanno stessi svantaggi:

1) Business Objects sono una parte dello strato BLL, e se si passa gli oggetti in BLL poi DAL diventa dipendente di BLL. basso livello sa di quello superiore -. Questo contraddice l'idea di strati a tutti

2) Business Object sono usially molto complessa per salvare direttamente in BD. In questo caso è preferibile introdurre nuovi "mappatori" strato intermedio.

Per superare tutti questi problemi mi faccio usially interfaccia DAL indipendente da Business Objects. Io uso le classi "riga", invece - rappresentazione di un record nel database o XML. In .NET 3.5 LinqToSql generati automaticamente le classi possono essere utilizzati per questo scopo.

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