Sto costruendo un'app per Android che avrà più origini dati a seconda di chi lo sta utilizzando. L'architettura N-tier con un pattern di repository sembra il modo giusto per farlo, ma sto cercando di attenermi ad alcune regole di base.
Da quello che ho capito dovrei essere in grado di scrivere il BL senza sapere realmente nulla sull'interfaccia utente o sul DAL. Il mio problema è che una volta iniziato a scrivere il livello dell'interfaccia utente ho capito che ho bisogno del DAL per funzionare su un thread in background. Questo mi obbliga a modificare il mio BL / DAL per eseguire asincroni w / callback in base a un requisito del livello dell'interfaccia utente che urla "NO" a me.
Ecco i 4 livelli che ho adesso e le loro dipendenze.
UI - dipendenze su BL e Common / Repository = Attività / frammenti Android. UI Layer dirà al BL quale tipo di repository / DAL concreto usare
BL - dipendenze su interfacce Common / Repository = Pacchetto separato con regole aziendali. Usa il repository concreto che è stato passato dal livello dell'interfaccia utente per fare cose
Comune / Repository - nessuna dipendenza = Pacchetto separato con modelli e interfacce che consente a tutti gli altri livelli di interagire senza conoscersi l'un l'altro. E 'anche considerato uno strato? I modelli dovrebbero essere classi o interfacce concrete?
DAL - dipendenze dal pacchetto Common / Repository = Pacchetto separato con le implementazioni concrete dei repository. Se Common non ha modelli concreti, ogni strato deve avere i propri modelli concreti per creare oggetti da passare tra i livelli?
Cosa mi manca? Sto cercando di forzarmi a uscire dalla mia zona di comfort su questo :)