Reuni várias perguntas da entrevista como "Descreva como você criaria um aplicativo de álbum de fotos", "Descreva como você criaria esse recurso específico desse site específico" (por exemplo, curtidas no Facebook, recomendações na Amazon, carrinho de compras, jogos de black jack). Então, e se houver milhões dessa coisa? O que você mudaria?
Parece que isso está esperando um esquema de banco de dados ou várias definições de classe (ou ambas?). Eu aprendi sobre bancos de dados na escola, mas na verdade nunca havia arquitetado um aplicativo antes e estou tendo problemas para saber por onde começar, se os projetos apresentados são "bons" e o que posso mudar para torná-lo escalável.
Existe uma abordagem geral ou um processo de pensamento ao projetar esses sistemas? E questões / problemas gerais que parecem surgir muito no design que eu deveria tentar evitar? Alguém poderia me orientar em uma delas (ou de preferência em todas, comparando as necessidades de cada uma) e explicar:
1) Como você cria quais entidades são necessárias? 2) Como você decide quais relacionamentos tudo terá? 3) Como você incorpora a otimização de desempenho em seu design? 4) Faço isso usando classes ou bancos de dados? Isso faz alguma diferença (ou seja, eu teria uma classe que realmente não pode ser traduzida para uma tabela de banco de dados, por exemplo?)
A principal razão pela qual estou perguntando é porque estava passando por "Cracking the Coding Interview" e minhas respostas eram completamente diferentes das do autor - eu tinha idéias muito diferentes de quais classes eram importantes.
MINHA TENTATIVA: Com o aplicativo de compartilhamento de fotos, eu teria as classes / tabelas: Foto e Usuário, com certeza.
Então, acho que se estamos tentando criar um esquema, haveria uma tabela vinculando foto e usuário se assumirmos que cada pessoa na foto está vinculada à foto (essa tabela é necessária? Se não, ainda é prática comum ter uma tabela separada para relacionamentos muitos-para-muitos ou não?).
Mas se estamos tentando adotar uma abordagem orientada a objetos, talvez tenhamos uma classe chamada album, que faz todo o trabalho e tem todas as informações das outras duas tabelas / classes. Isso é uma coisa que eu notei no livro - há várias classes e, em seguida, uma classe que basicamente tem todas as informações e conecta as outras classes - isso é comum? Por exemplo, nos meus exemplos acima, parece que isso se aplicaria?
Eu só espero que algumas regras / diretrizes gerais sejam seguidas porque, no momento, não tenho idéia de como é uma boa arquitetura para um sistema grande.