How do I choose a project's structure? What do I need to do to decide on the functions and classes that the project needs to have as well as the way that they interact with each other?
Penso che la struttura di un progetto debba essere selezionata in base a ciò che fa il progetto. Stai facendo una libreria o un'applicazione? Qual è il suo scopo? Come dovrebbe essere usato? Che tipo di funzionalità vorresti che l'utente avesse?
Nel caso di un'applicazione, la struttura più comune è l'architettura Model-View-Controller (MVC). Ci sono interi framework (come Rails) che sono dedicati a questa architettura, e funzionano perché le cose simili si attaccano a cose simili. Il codice che descrive un modello si trova insieme in una cartella o in un pacchetto chiamato model
, mentre i controller siedono in controller
e le viste siedono in view
.
Facciamo un esempio di giocattolo: supponiamo che tu stia costruendo un'app mobile che consente a due utenti di inviare messaggi tra loro. Gli utenti dovrebbero essere in grado di avere un elenco di persone da contattare, avere un modo di guardare i messaggi e avere un modo per inviare messaggi a persone specifiche. Poiché si tratta di un'applicazione che deve contenere dati e consentire a un utente di modificare e interagire con tali dati, l'architettura MVC sarebbe una buona soluzione.
Per il componente del modello, avremo bisogno di classi che rappresentino i dati che stiamo archiviando e interagendo con. Ciò significa che probabilmente avremo bisogno di una classe Contact
, una classe Message
e forse una classe Conversation
che contiene un elenco ordinato di Message
s con un altro Contact
, così come una classe Directory
che contiene un elenco di Contact
s. Quindi con la nostra directory src
avremmo una directory model
che contiene tutte quelle classi.
Il componente di visualizzazione dipende in gran parte da ciò su cui l'app viene costruita. Per Android, definiresti un insieme di View
se ViewGroup
s visualizzati sullo schermo con cui l'utente può interagire. Puoi raggruppare tutti questi elementi in un'unica directory view
(o pacchetto se stai utilizzando Java.)
Ci deve essere un modo per l'utente di interagire con le viste e causare cambiamenti con i dati. Questo codice si posizionerebbe nella directory controller
. Puoi avere controller separati per funzioni separate dell'app: modificare un elenco di contatti, inviare e ricevere messaggi, ecc.
A quel punto, metti semplicemente classi, funzioni e variabili in questi pezzi separati in base al bisogno che riempiono. Dovrai avere un modo per aggiungere e rimuovere contatti, quindi avere metodi come addContact
e removeContact
nella classe Directory
che il controller può utilizzare per apportare tale modifica. La vista dovrebbe essere in grado di far sapere al controllore che un contatto deve essere cancellato, quindi progettarlo in modo da avere un pulsante di cancellazione, e poi fare in modo che il pulsante di cancellazione notifichi al controller che è necessario eliminare un contatto specifico.
Segui questo schema per ogni parte del tuo progetto e mantieni buone convenzioni di denominazione e pratiche di codifica, e prima che tu te ne accorga, avrai costruito qualcosa di prezioso e di facile manutenzione.