Я собрал кучу вопросов для интервью, таких как «Опишите, как вы будете разрабатывать приложение для фотоальбома», «Опишите, как бы вы разработали эту особенность данного веб-сайта» (например, лайки в Facebook, рекомендации по Amazon, корзина покупок, игра Блэк Джек). Тогда, что, если есть миллионы этой вещи? Что бы вы изменили?
Похоже, это либо ожидание схемы базы данных, либо набор определений классов (или оба?). Я узнал о базах данных в школе, но на самом деле я никогда не проектировал приложение раньше, и мне трудно понять, с чего начать, хороши ли проекты, которые я придумаю, и что я могу изменить, чтобы сделать его масштабируемым.
Есть ли общий подход или мыслительный процесс при проектировании этих систем? И общие проблемы / проблемы, которые, кажется, часто возникают в дизайне, которых я должен стараться избегать? Может, кто-нибудь проведет меня через один (или, предпочтительно, все, сравнивая потребности каждого) из них и объяснит:
1) Как вы придумываете, какие сущности нужны? 2) Как вы решаете, какие отношения у вас будут? 3) Как вы включаете оптимизацию производительности в свой дизайн? 4) Я делаю это, используя классы или базы данных? Имеет ли это значение (например, есть ли у меня класс, который не может быть переведен, например, в таблицу базы данных?)
Основная причина, по которой я спрашиваю, заключается в том, что я проходил «Взлом собеседования по кодированию», и мои ответы полностью отличались от ответов автора - у меня были совершенно разные представления о том, какие занятия важны.
МОЯ ПОПЫТКА: С приложением для обмена фотографиями у меня были бы классы / таблицы: Фото и Пользователь точно.
Затем, я думаю, что если мы пытаемся создать схему, будет таблица, связывающая фотографию и пользователя, если мы предположим, что каждый человек на фотографии связан с фотографией (нужна ли эта таблица? Если нет, то все еще является обычной практикой иметь отдельную таблицу для отношений «многие ко многим» или нет?).
Но если мы пытаемся использовать объектно-ориентированный подход, возможно, вместо этого у нас будет класс с именем album, который выполняет всю работу и имеет всю информацию из двух других таблиц / классов. Это одна вещь, которую я заметил в книге - есть куча классов, а затем один класс, который в основном имеет всю информацию и соединяет другие классы - это распространено? Например, в моих примерах выше, кажется ли это, что это применимо?
Я просто надеюсь, что будут следовать некоторые общие правила / рекомендации, потому что сейчас я не знаю, как сказать, как выглядит хорошая архитектура для большой системы.