Ciao a tutti sono abbastanza nuovo per il processo di sviluppo a più livelli. Attualmente sto sviluppando un'applicazione e ho alcune domande di base sulle migliori pratiche/domande di architettura con la tecnologia di oggi. Utilizzerò WCF come livello di servizio. Nota sto provando a disaccoppiare le cose il più possibile. Non voglio che nulla ai livelli superiori debba sapere nulla sui livelli inferiori, che è uno dei motivi per cui LINQ TO SQL o il framework delle entità non mi piacciono.Domanda di architettura per lo sviluppo a livello.
1) Qual è il modo migliore per passare i dati tra i livelli? So che sia un dataset o un datatable sarebbe facile, ma non penserei che passare questa struttura di dati gonfio tra i livelli sarebbe la soluzione migliore. Anche il debugging sarebbe più difficile se i datatables/dataset fossero grandi. Forse una serie di oggetti POCO sarebbe la soluzione migliore o c'è un modo migliore?
2) La prossima domanda è un po 'più complicata. Molte applicazioni avranno un sacco di diverse visualizzazioni dei dati. Potresti avere più report, una varietà di datagrids e magari un grafico o due. Come procedi nel progettare il tuo livello dati per questo? Disegnate semplicemente una funzione di tipo "Ottieni" per ogni tabella e poi provate a combinarli in viste utili per dire una griglia o un report nel vostro livello commerciale o avete una funzione specializzata per ogni vista di cui avete bisogno nel livello commerciale.
A dire il vero non mi piace nessuna delle due soluzioni. Se si decide la logica specializzata per visualizzazione, sarà necessario creare un oggetto POCO (presupponendo che si restituisca un array di oggetti POCO) per visualizzazione. Se in seguito decidi di aggiungere più colonne a una vista, spezzerai il codice esistente (perché cambi l'interfaccia su POCO). Se decidi di restituire una vista di ogni tabella e provare a combinarla nel livello commerciale di quello che potrebbe diventare DAVVERO disordinato. TSQL si unisce per un motivo :). Inoltre potresti restituire molti più dati di cui hai bisogno a seconda del tuo design che sarebbe inefficiente.
Ho qualche altra domanda ma la salverò più tardi. Non voglio questo post per diventare a grandi :)
NCAGE
Pensateci in questo modo ... se progettate il vostro sistema in quel modo, dovrete fare riferimento al vostro livello di dati sia nel vostro livello aziendale, sia nel livello client. È un buon design? Cosa succede se interrompi l'interfaccia sul tuo livello dati perché hai aggiunto una colonna al database. Hai appena rotto tutti i client e anche le modifiche dovranno essere implementate su N client, a meno che tu non restituisca un tipo anonimo. Inoltre, non è possibile passare l'oggetto datacontext attraverso i livelli (WCF). – user81206
Ma quello che è stato menzionato era il SUPERIORE che non conosceva il LOWER, non il LOWER che non conosceva UPPER, che è quello che stai descrivendo qui. A cosa, esattamente, ti riferisci come "tier" qui? Sono solo progetti diversi in una soluzione? Processi diversi sulla stessa macchina? Diverse macchine del tutto? –
E, a parte, non è possibile restituire un tipo anonimo al di fuori dell'ambito della sua creazione (in altre parole, non è possibile restituire un tipo anonimo (diverso da un "oggetto") al di fuori di una funzione. –