He reunido un montón de preguntas de 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" (por ejemplo, me gusta en Facebook, recomendación en Amazon, carrito de compras, juego de gato negro). Entonces, ¿qué pasa si hay millones de esta cosa? ¿Qué cambiarías?
Parece que esto está esperando un esquema de base de datos o un montón de definiciones de clase (¿o ambas?). Aprendí sobre bases de datos en la escuela, pero nunca antes diseñé una aplicación y tengo problemas para saber por dónde empezar, si los diseños que se me ocurren son "buenos" y qué puedo cambiar para que sea escalable.
¿Existe un enfoque general o proceso de pensamiento al diseñar estos sistemas? ¿Y problemas / problemas generales que parecen surgir mucho en el diseño que debo tratar de evitar? ¿Podría alguien guiarme a través de uno (o preferiblemente todos, al comparar las necesidades de cada uno) y explicarme:
1) ¿Cómo se te ocurren qué entidades se necesitan? 2) ¿Cómo decides qué relaciones tendrá todo? 3) ¿Cómo incorpora la optimización del rendimiento en su diseño? 4) ¿Hago esto usando clases o bases de datos? ¿Hay alguna diferencia (es decir, ¿tendría una clase que realmente no se puede traducir a una tabla de base de datos, por ejemplo?)
La razón principal por la que pregunto es porque estaba pasando por la "Entrevista de descifrado" y mis respuestas eran 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 estamos tratando de crear un esquema, habría una tabla que vincule la foto y el usuario si asumimos que cada persona en la foto está vinculada a la foto (¿es necesaria esta tabla? Si no, ¿sigue siendo una práctica común? tener una tabla separada para las relaciones de muchos a muchos o no?
Pero si estamos tratando de adoptar un enfoque orientado a objetos, quizás tengamos una clase llamada album 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 distinguir una buena arquitectura para un sistema grande.