He recopilado un montón de preguntas de la entrevista como "Describe cómo diseñarías una aplicación de álbum de fotos", "Describe cómo diseñarías esta característica particular de este sitio web en particular" (p. ej., me gusta en Facebook, recomendaciones en Amazon, compras carro, juego de black jack). Entonces, ¿y si hay millones de esto? ¿Qué cambiarías?
Parece que esto está esperando un esquema de base de datos o un conjunto de definiciones de clase (¿o ambas?). Aprendí sobre bases de datos en la escuela, pero en realidad nunca he diseñado una aplicación antes y tengo problemas para saber por dónde empezar, si los diseños que tengo son "buenos" y qué puedo cambiar para hacerlos escalables.
¿Hay un enfoque general o proceso de pensamiento al diseñar estos sistemas? ¿Y los problemas / problemas generales que parecen surgir mucho en el diseño que debería intentar evitar? ¿Alguien podría guiarme a través de uno (o preferiblemente de todos, al comparar las necesidades de cada uno) y explicar:
1) ¿Cómo se te ocurren las entidades que se necesitan? 2) ¿Cómo decides qué relaciones tendrá todo? 3) ¿Cómo incorporas la optimización del rendimiento en tu diseño? 4) ¿Hago esto usando clases o bases de datos? ¿Hace una diferencia (es decir, tendría una clase que no pueda ser traducida a una tabla de base de datos, por ejemplo?)
La razón principal por la que pregunto es porque estaba en "Cracking the Coding Interview" y mis respuestas fueron completamente diferentes a las del autor: tenía ideas muy diferentes sobre qué clases eran importantes.
MI INTENTO: Con la aplicación para compartir fotos, tendría las clases / tablas: Foto y usuario seguro.
Entonces, creo que si intentamos crear un esquema, habría una tabla que vincula la foto y el usuario si asumimos que cada persona en la foto está vinculada a la foto (¿es esta tabla necesaria? Si no, ¿es ¿Sigue siendo una práctica común tener una tabla separada para relaciones de muchos a muchos o no?).
Pero si estamos intentando adoptar un enfoque orientado a objetos, tal vez tendríamos una clase llamada álbum que hace todo el trabajo y tiene toda la información de las otras dos tablas / clases. Esto es algo que noté en el libro: hay un montón de clases y luego una clase que básicamente tiene toda la información y conecta las otras clases. ¿Es esto común? Por ejemplo, en mis ejemplos anteriores, ¿parece que esto se aplicaría?
Solo espero que sigan algunas reglas / pautas generales porque en este momento no tengo idea de cómo decir qué aspecto tiene una buena arquitectura para un sistema grande.