Come organizzare tutte le classi derivate da SRP?

2

Come dice l'SRP, il modo per raggiungere questo principio è dividere tutto in più piccolo. E quello che hai appena fatto piccolo, renderlo più piccolo. Di conseguenza abbiamo più file e la mia domanda è su di esso, come organizzare tutte queste nuove classi che vengono generate per mantenere le nostre directory pulite, come il codice.

Ad esempio. Sto sviluppando un'applicazione per Android su cui ho una funzionalità su come leggere un feed RSS. Viene richiamato da diversi schermi. È ovvio che è una responsabilità ma per riuscirci, ho le mie responsabilità secondarie.

Per leggere un canale RSS devo ...:

  • Scarica il file XML dall'URL.
  • Analizza il file XML scaricato recuperando i dettagli del canale e tutti gli elementi del feed.

Quindi avrò RSSChannelReader.java il cui metodo pubblico, qualcosa come read() invocherà NetworkRequest.java e RSSDocumentParser.java . Poiché i principi SOLID suggeriscono la segregazione delle interfacce, userò le interfacce INetworkRequest.java IRSSDocumentParser.java per operare.

Inoltre, il mio RSSDocumentParser.java utilizzerà ChannelRSS.java e ChannelRSSFeedItem.java che funziona come vo per la descrizione del canale generale e i valori degli elementi del feed.

Quindi avrò tutte queste nuove classi: RSSChannelReader.java , INetworkRequest.java , IRSSDocumentParser.java , NetworkRequest.java , RSSDocumentParser.java , ChannelRSS.java , ChannelRSSFeedItem.java .

La struttura dir della mia app è:

  • Attività /: contiene le schermate dell'app
  • Modelli /:
  • Business /:
  • Libs /:
  • [...]

Allora, dove metto tutti questi nuovi file? Dovrei inserire RSSChannelReader.java , IRSSDocumentParser.java , RSSDocumentParser.java , ChannelRSS.java , ChannelRSSFeedItem.java in business/RSSChannelReader . C'è qualche problema se mischio i file delle interfacce con le loro implementazioni?

Che dire di ChannelRSS.java ,% diChannelRSSFeedItem.java. Deve essere presente in bussiness/RSSChannelReader o poiché agiscono come valore oggetto deve essere su models\ . Devo dire che lavoro con loro nelle finestre / schermate della mia app. O forse per creare un adattatore per trasformare l'oggetto risultato generato dal mio RSSChannelReader.java nel mio oggetto modello?

INetworkRequest.java e NetworkRequest.java devono essere in una cartella diversa da business/RSSChannelReader .

Il mio vero problema, penso, è che alcune responsabilità, in questo caso ReadRSSChannel , possono produrre altre che possono essere utilizzate come responsabilità per altre responsabilità, ad esempio il mio NetworkRequest . Posso usare per leggere rss ma potrebbe anche essere utile per scaricare le immagini.

Devo creare una nuova cartella per ogni responsabilità?

Sono un po 'confuso perché il mio progetto sta aumentando e alcuni file non sono posizionati nel posto giusto. In alcuni punti il mio nome del pacchetto è troppo lungo con livelli secondari.

    
posta korima 11.11.2014 - 21:11
fonte

1 risposta

2

Non sono uno sviluppatore Android ma la tua domanda è abbastanza generica, quindi mi prenderò una pugnalata.

how organize all this new classes that are generated to keep our dirs clean

Nel mondo Java lo farai collocando il codice in pacchetti separati. Ad esempio, nel tuo caso, puoi creare un pacchetto com.yourcompany.rss e posizionare tutti i file lì.

Fintanto che il contenuto del pacchetto com.yourcompany.rss si attacca a SRP e definisce l'interfaccia solo per l'analisi / consumo RSS, va bene mescolare le interfacce con l'implementazione. Tuttavia, se in un'app ottieni decine di interfacce e implementazione, dovresti prendere in considerazione i pacchetti secondari.

    
risposta data 12.11.2014 - 14:53
fonte

Leggi altre domande sui tag