In OnionArchitecture UI può parlare direttamente con datastore o no?

0

Sono fan di onion architecture ma cerco soluzioni rilassanti in alcune aree .

Prima di tutto stavo pensando a comunicare direttamente dall'interfaccia utente (dal controller in mvc) ai dati sul lato di lettura. Come tutti possono vedere, l'interfaccia utente non dovrebbe essere referenziata a nessun assembly tranne Core.

Quando voglio visualizzare l'elenco dei Paesi sulla pagina per selezionarne uno, devo davvero farlo attraverso il mio core?

Vedo due soluzioni:

  • L'interfaccia utente fa riferimento a NHibernate e parla direttamente
  • aggiungi uno strato di astrazione molto sottile dove definisco IFinder < > (solo per leggere i dati) che verranno implementati nell'infrastruttura

Pensieri?

    
posta dariol 19.06.2013 - 14:40
fonte

2 risposte

4

Lo scopo di un'architettura a cipolla è che uno strato non debba preoccuparsi di come gli altri livelli operano internamente.

Il fatto che il modello utilizzi Hibernate per ottenere l'elenco dei paesi è qualcosa che il livello dell'interfaccia utente non ha bisogno di sapere. Potresti, ad esempio, decidere in seguito di codificare l'elenco dei Paesi, memorizzarlo nella memoria o provare una soluzione NoSQL esotica che non è supportata da Hibernate. Questa è una decisione che dovrebbe riguardare solo il modello, non l'interfaccia utente. Pertanto, l'interfaccia utente dovrebbe ottenere tutte le informazioni sul modello mediante incapsulare le chiamate al metodo, indipendentemente dalla loro dimensione iniziale.

    
risposta data 19.06.2013 - 14:54
fonte
1

Se chiami direttamente NHibernate dal livello dell'interfaccia utente non stai implementando l'architettura di Onion e il tuo codice sarà altamente accoppiato. Per un piccolo progetto questo potrebbe non essere importante, ma se stai creando qualcosa di più duraturo o una soluzione aziendale, ti consigliamo di creare un'interfaccia come nel tuo secondo esempio per assicurarti di avere la massima flessibilità per modificare l'implementazione concreta in seguito. Probabilmente vorrai anche esaminare l'uso di un contenitore IoC per iniettare le tue dipendenze, anche se di nuovo consideri se il tuo progetto ha realmente bisogno dell'approccio di Onion, poiché tutto ciò aggiungerà un overhead di codice abbastanza significativo.

    
risposta data 19.06.2013 - 17:13
fonte