2016-03-10 18 views
6

Ho letto diversi documenti sull'architettura pulita in generale e su Android specifici.Modello di architettura pulito Android

Mi piace totalmente l'idea di creare un modulo separato per ogni nuova funzionalità, ma la mia preoccupazione è come organizzo i miei oggetti del livello dati? Come voglio che siano riutilizzabili.

Il livello dati deve essere un modulo separato insieme a tutti i moduli funzione o lo strato dati deve essere suddiviso in componenti come moduli? per esempio. modulo separato per rete, database ecc.?

+0

Controlla questo https://github.com/android10/Android-CleanArchitecture – hehe

+1

Ho già visto l'esempio e l'Autore ha menzionato nel relativo post sul blog per non seguire il suo progetto.Questo esempio ha Livelli al livello più alto, mentre l'autore propone di avere 'caratteristiche' al livello più alto – geekoraul

risposta

8

Dai un'occhiata a questo progetto per un'architettura pulita per Android. https://github.com/Karumi/Rosie. Per rispondere alla tua domanda - separo personalmente i componenti di rete per ciascun modulo e li inietto nei moduli di funzione appropriati che ne hanno bisogno. Ad esempio, immagina di creare una sorta di client Twitter: potrei avere un feedManager di classe, che espone i metodi per recuperare il feed e TweetManager, che espone i metodi per creare un nuovo tweet. È un po 'eccessivo per questo esempio, dato che FeedManager e TweetManager potrebbero essere molto piccoli.

Diffidare troppo dell'architettura eccessiva. Avere un singolo modulo di rete che abbia metodi per ogni richiesta di rete nell'app è un odore di codice e diventa difficile da mantenere man mano che la tua app cresce. Tuttavia, se la tua app è di piccole dimensioni, avere più classi di rete che ognuna esegue una piccola cosa potrebbe anche essere eccessivo e probabilmente trarrai vantaggio dall'avere un solo modulo di rete.

Inoltre, non sentirti come se dovessi andare intero su Clean Architecture: è possibile unire più livelli in un singolo livello se è adatto all'app. Ho fatto questo errore mentre cercavo di implementare VIPER (un derivato dell'architettura pulito) 'dal libro', e ho finito per avere diverse classi extra per ogni funzione che fondamentalmente non facevano altro che passare i dati al livello successivo, ed è diventata una seccatura enorme mantenere. L'architettura pulita può essere una manna dal cielo per un progetto complesso di grandi dimensioni in cui è necessario separare le preoccupazioni all'estremo, ma per la maggior parte delle app Android che ho visto, MVC, MVVM o MVP molto più semplice sarà abbastanza buono.

+0

Concordo sul fatto che potrebbe essere eccessivo, ma per implementare un'architettura pulita con l'iniezione delle dipendenze e RxJava sembra una scelta molto fattibile nell'implementazione dei test (unità, strumentazione e interfaccia utente) in modo efficace. È molto chiaro quale test va in quale parte del codice. Il che non è così semplice se si utilizza l'architettura MVC, MVVM o MVP – geekoraul

+0

@geekoraul È d'accordo sul fatto che MVC sia un problema da testare - ma non dovresti avere troppi problemi con MVVM o MVP, dal momento che gran parte della logica è solo in POJO . Finché si sposta la logica al di fuori delle classi del framework (Attività, Frammento, Servizio, ecc.), Diventa banale il test unitario. – eliasbagley

+1

Grazie per la tua risposta, aspetterò ancora qualche altra osservazione accetterà il tuo :) Non so davvero perché qualcuno potrebbe inoltrare una domanda così specifica – geekoraul

3

Per prima cosa vorrei correggere che l'architettura del pacchetto deve essere basata sulla funzionalità e non sull'architettura del modulo come hai menzionato. In secondo luogo, per ospitare tutti gli oggetti relativi al database, basta creare un pakage dedicato per lo stesso.

Ecco lo screenshot di uno dei progetti. Potrebbe essere che ti aiuterebbe. Here is the screenshot of one of the project. May be it would help you.

Ref & more detail

1

Non c'è l'architettura, pulita o no per domarli. Non c'è un modo corretto di fare le cose.

Il mio miglior consiglio è quello di utilizzare queste idee diverse nei propri progetti e continuare a scorrere e migliorare continuamente finché non si dispone di una buona base che funzioni per voi. Cerca di implementare qualcosa, quindi fai un passo indietro e rivedi il tuo lavoro, guarda cosa funziona e cosa potrebbe essere migliore.

Potrei darti un po 'di link, ma sembra che tu ne abbia già letto la maggior parte. Non puoi imparare come andare in bicicletta leggendo, acquisendo codice e scrivendo sui tuoi risultati!

+0

è stato piuttosto eloquente, ma quello che sto cercando di fare qui è discutere un approccio particolare. Sono in una di quelle iterazioni e ho bisogno di essere convalidato attraverso una sana discussione. In queste iterazioni viene consumato molto tempo e non sono disposto a passare semplicemente a progetti in evoluzione a livello di produzione. – geekoraul