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.