Sono 20 le classi Java per fare solo una chiamata REST troppo?

2

In un progetto Android, sto usando dagger 2 per l'iniezione delle dipendenze, applicando il modello di progettazione di mvp e sto scrivendo un'interfaccia per quasi tutte le classi. Sebbene abbia raggiunto la separazione delle preoccupazioni, ogni logica individuale non è accoppiata con altre. Ma per fare una semplice chiamata REST, ha coinvolto più di 20 file di classe java che rendono il codebase molto complesso, comincio a pensare che sia normale avere 20 classi java più per fare una semplice chiamata REST? Dovrei davvero fare il pattern MVP e scrivere interfacce per ogni classe, o semplicemente sto sbagliando?

Per Dagger 2, è necessario configurare componenti, moduli e ambiti, ovvero 5 file inclusi i componenti padre e figlio.

Per il modello MVP, c'è un'interfaccia e una classe di implementazione dell'interfaccia per il modello, Visualizza e Presentatore, che sono già 6 file. Per il relatore, c'è un altro livello che fa il lavoro effettivo della chiamata REST, ovvero 4 file, interfacce e implementazioni dell'interfaccia per eseguire la chiamata REST e la gestione dei risultati.

Inoltre la classe di attività e la sua classe genitore e alcune altre classi di utilità e file xml, vale a dire più di 20 file.

Se rimuovo il dagger 2, rimuovi il pattern MVP e rimuovi tutte le interfacce, potrei ottenere lo stesso in poche classi java o anche solo in una classe java. Se fornisco a me stesso questi 20 file alcuni anni fa, potrei non avere idea di come ognuno si connetta agli altri, può solo fare le supposizioni probabilmente, anche adesso ho trovato molto più difficile tracciare il codice rispetto alla versione senza DI, MVP e interfacce.

    
posta s-hunter 22.07.2016 - 01:00
fonte

2 risposte

4

Is 20 Java classes for just making...

Questa è completamente la domanda sbagliata. Qualcosa non va o non te lo chiederesti. Sembra che tu stia cercando qualcosa da incolpare. Angosciare il numero di classi non ha intenzione di risolverlo.

Ho sentito prima questo stesso dolore. Fai un passo indietro e guarda tutto. Funziona. Puoi un po 'seguirlo. Ma lo sai guardarlo più tardi sarai perso. Non ti piace. Vuoi aggiustarlo ora mentre puoi seguirlo. Impostare un limite sul numero di classi perché stai solo provando a fare x non lo risolverà.

Ciò che verrà risolto è l'astrazione.

Perché pensi che ci siano 20 classi? Può essere perché tutti si mostrano in un posto, quindi ora devi pensarci tutti insieme. Questo è ciò che è male.

20 è un numero grande. 4 e 5 non lo sono. Non mi dispiacerebbe vedere 4 gruppi con 5 classi che lavoravano insieme. Questo è ancora 20. È solo organizzato, quindi è più facile da guardare.

A volte una struttura per l'iniezione di dipendenza rende facile assumere un atteggiamento procedurale nei confronti della costruzione. Basta creare una pila di collegamenti tra oggetti che non hanno alcuna struttura. È facile da scrivere Non è così facile da leggere.

Se li hai riversati tutti in un unico file che definisce il modo in cui si collegano, guardi l'intero grafico dell'oggetto contemporaneamente. Con solo 5 classi che possono iniziare a essere dolorose. Trova alcune separazioni logiche. Rompi le cose. Raggruppa gli oggetti che hanno a che fare l'uno con l'altro. Separa quelli che non lo fanno.

Una grande cosa che può aiutare con questo è modelli creazionali. Quando esponi ogni dipendenza posseduta da un oggetto, rendi la cosa fastidiosa. Un buon builder ti permette di separare le dipendenze che cambiano spesso dalle dipendenze che non lo fanno. Piuttosto che nascondere le dipendenze nell'oggetto, le nascondi nel builder. Quando sono disponibili buone impostazioni predefinite dovrebbero essere facili da usare.

Per quanto riguarda le interfacce che stai salvando qui hai detto "quasi". Odio quando le persone estraggono ciecamente le interfacce senza pensare a quello che stanno facendo. È completamente indietro pensare un'interfaccia APPARTIENE alla classe che la implementa. No, i clienti hanno l'interfaccia. L'interfaccia esiste PER IL CLIENTE, DEVE ESSERE DEFINITA DAL CLIENTE E POTREBBE NON ESSERE MAI CAMBIATA SOLO AL CONSENSO DEL CLIENTE. Se ti capita di essere un oggetto che implementa quell'interfaccia, fa bene a te. Adesso stai zitto e fai quello che ti viene detto. Il cliente non vuole neanche sapere che esisti.

Detto questo, mi piacciono le interfacce. Principalmente perché quando scrivo clienti che si riferiscono a loro e non a implementazioni non sono tentato di usarne di nuovi. La grande eccezione a questo è oggetti valore. Le stringhe non hanno bisogno di creare interfacce per loro. Se utilizzi altri oggetti valore, anche quelli di tua progettazione, generalmente non gli dai un'interfaccia , non dovresti dare loro un comportamento, non hai bisogno di testarli e non dovresti mai cambiarli. Sai, come le stringhe.

Ora, se stai parlando di un oggetto comportamentale che deve effettivamente riflettere, prova quella dannata cosa.

Se stai facendo MVP, configurando i componenti, i moduli e gli ambiti dei pugnali, stai facendo molto di più del semplice REST.

    
risposta data 22.07.2016 - 04:30
fonte
1

Solo un sospetto, ma stai scrivendo test unitari? Molte piccole classi su alcune di grandi dimensioni diventano più preziose mentre testate il vostro codice in modo più approfondito e da più livelli di ambienti di simulazione, unità o ambienti di produzione.

Non penso che avere un gran numero di classi in Java sia un problema o sia insolito, ma sono preoccupato che tu ti senta così negativo riguardo alla produttività complessiva. Ma di nuovo, se non stai testando, la qualità del codice è un problema. Lentamente e dolorosamente la scrittura di codice senza bug è buona, o la cosa migliore, codice facile da eseguire il debug tramite buone tracce di stack e possibilità di eseguire test su classi problematiche.

Un suggerimento è di scrivere la versione "vanilla", quindi migrare su MVC, Dagger2, ecc. quando senti che hai sempre più problemi o punti di dolore che potrebbero essere risolti da questi framework. È possibile sopravvalutare il costo di una migrazione con la stessa facilità con cui sottovalutarlo. Questa strategia può facilitare la tua produttività ora ti dà una comprensione più nitida di quali problemi i framework dovrebbero risolvere e quali sono i punti più o meno scontati.

    
risposta data 22.07.2016 - 04:31
fonte

Leggi altre domande sui tag