Ho raccolto un sacco di domande per interviste come "Descrivi come disegneresti un'applicazione per album di foto", "Descrivi come progetteresti questa particolare funzionalità di questo particolare sito web" (ad esempio, Mi piace su Facebook, consigli su Amazon, shopping carrello, gioco di black jack). Quindi, cosa succede se ci sono milioni di questa cosa? Cosa cambieresti?
Sembra che sia in attesa di uno schema di database o di una serie di definizioni di classe (o entrambe?). Ho imparato a conoscere i database a scuola, ma non ho mai architettato un'applicazione in precedenza e sto avendo problemi a sapere da dove cominciare, se i disegni che ho escogitato sono "buoni" e cosa posso cambiare per renderlo scalabile.
Esiste un approccio generale o un processo di pensiero durante la progettazione di questi sistemi? E problemi / problemi generali che sembrano emergere molto nel design che dovrei cercare di evitare? Qualcuno potrebbe forse guidarmi attraverso uno (o preferibilmente tutti, confrontando i bisogni di ciascuno) con questi e spiegare:
1) Come vieni con quali entità sono necessarie? 2) Come decidi su quali relazioni avrà tutto? 3) Come incorpori l'ottimizzazione delle prestazioni nel tuo progetto? 4) Lo faccio usando classi o database? Fa una differenza (ad esempio, avrei una classe che non può essere realmente tradotta in una tabella di database, ad esempio?)
Il motivo principale che sto chiedendo è che stavo passando per "Cracking the Coding Interview" e le mie risposte erano completamente diverse da quelle dell'autore - avevo idee molto diverse su quali fossero le classi importanti.
IL MIO TENTATIVO: Con l'app di condivisione foto, avrei le classi / tabelle: Foto e Utente di sicuro.
Quindi, se stiamo cercando di creare uno schema, ci sarebbe una tabella che collega foto e utenti se supponiamo che ogni persona nella foto sia collegata alla foto (è questa tabella necessaria? In caso contrario, è pratica ancora comune per avere una tabella separata per le relazioni molti-a-molti o no?).
Ma se stiamo cercando di adottare un approccio orientato agli oggetti, forse avremmo una classe chiamata album che fa tutto il lavoro e ha tutte le informazioni delle altre due tabelle / classi. Questa è una cosa che ho notato nel libro - ci sono un sacco di classi e poi una classe che ha fondamentalmente tutte le informazioni e collega le altre classi - è comune? Ad esempio, nei miei esempi sopra, sembra che si applicherebbe?
Spero solo che vengano seguite alcune regole / linee guida generali perché al momento non ho idea di come sia una buona architettura per un sistema di grandi dimensioni.