Ho raccolto un sacco di domande di intervista come "Descrivi come progetteresti un'applicazione per un album fotografico", "Descrivi come progetteresti questa particolare caratteristica di questo particolare sito Web" (ad es. Mi piace su Facebook, raccomandazione su Amazon, carrello della spesa, gioco di black jack). Quindi, se ci fossero milioni di questa cosa? Cosa cambieresti?
Sembra che questo si aspetti uno schema di database o un mucchio di definizioni di classe (o entrambi?). Ho imparato a conoscere i database a scuola, ma in realtà non ho mai progettato un'applicazione e non ho mai saputo da dove cominciare, se i progetti che ho creato 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 nella progettazione che dovrei cercare di evitare? Qualcuno potrebbe forse guidarmi attraverso uno (o preferibilmente tutti, confrontando le esigenze di ciascuno) di questi e spiegare:
1) Come si ottengono le entità necessarie? 2) Come decidi su quali relazioni avrà tutto? 3) Come si incorpora l'ottimizzazione delle prestazioni nel proprio progetto? 4) Faccio questo usando classi o database? Fa la differenza (ad esempio, avrei una classe che non può davvero essere tradotta in una tabella di database, per esempio?)
Il motivo principale che sto chiedendo è perché stavo attraversando "Cracking the Coding Interview" e le mie risposte erano completamente diverse da quelle dell'autore - avevo idee molto diverse su quali classi fossero importanti.
IL MIO TENTATIVO: con l'app di condivisione delle foto, avrei sicuramente le classi / tabelle: foto e utente.
Quindi, penso che se stiamo cercando di creare uno schema, ci sarebbe una tabella che collega foto e utente se assumiamo che ogni persona nella foto sia collegata alla foto (questa tabella è necessaria? In caso contrario, è ancora pratica comune avere una tabella separata per relazioni molti-a-molti o no?).
Ma se stiamo cercando di adottare un approccio orientato agli oggetti, forse invece avremmo una classe chiamata album che fa tutto il lavoro e ha tutte le informazioni dalle altre due tabelle / classi. Questa è una cosa che ho notato nel libro - ci sono un sacco di classi e poi una classe che praticamente ha tutte le informazioni e collega le altre classi - è comune? Ad esempio, nei miei esempi precedenti, sembra che si applicherebbe?
Spero solo che seguano alcune regole / linee guida generali perché in questo momento non ho idea di come sia una buona architettura per un sistema di grandi dimensioni.