Principles Flashcards
(94 cards)
- Что нужно сделать перед выполнением миграций?
Согласовать с другими разработчиками и убедиться в отсутствии конфликтующих миграций на одной модели. Всегда актуализировать состояние миграций перед созданием новых.
- Почему важно согласовывать миграции с другими разработчиками?
Чтобы избежать конфликтующих миграций, которые могут вызвать проблемы с объединением и несоответствия в схеме базы данных.
- Что нужно проверить перед реализацией новых функций или методов?
Убедиться, что данная функциональность уже не реализована в проекте.
- Какой фреймворк следует использовать для новых API и где должна быть написана логика?
Использовать Django Rest Framework (DRF) и писать логику в приложении api, в пакетах views и serializers.
- Какие классы следует использовать для реализации API в DRF?
Предпочтительно использовать Generics или ModelViewSet. Используйте APIView только при необходимости.
- Какие правила именования следует соблюдать для моделей и полей?
Модели должны называться в единственном числе, а поля должны быть названы читабельно и понятно.
- Как следует называть классы представлений и сериализаторов?
Назвать их так, чтобы по названию было понятно, что они делают.
- Какие стандарты кодирования следует соблюдать?
A: Следовать PEP8, включать докстринги для всех классов и нетривиальных методов, комментировать сложный код и правильно управлять импортами.
- Как следует называть URL для API согласно принципам REST?
Правильно: /education_programs/certification/
Правильно: /education_programs/{id}
Неправильно: /lesson/teacher/create
- Какой баланс нужно поддерживать при написании кода?
Поддерживать разумный баланс между разделением логики на несколько классов/функций и сохранением её в одном классе/функции.
- Откуда должна быть создана новая ветка для задачи?
Всегда начинайте с последнего коммита на ветке dev и называйте ветку по номеру задачи (например, DOP-155).
- Что нужно сделать, если есть вопрос, над которым думаете больше часа?
Спросите, максимально разложив ситуацию по полочкам.
Можно ли менять важные константы без согласования?
Нет, не изменяйте важные константы без согласования.
- Что необходимо сделать для обеспечения надежности кода?
Тщательно тестируйте свой код.
Переобучение: Что означает “переобучение” в тестировании?
Программа хорошо работает с известными данными, но не справляется с новыми или неожиданными данными из-за слишком узко сфокусированных тестовых сценариев.
Тестирование: Какая проблема возникает при тестировании на слишком узком наборе данных?
Программа может пройти тесты, но при столкновении с новыми данными начинает давать сбои из-за недостаточного охвата тестами возможных реальных сценариев.
S: Что означает принцип единственной ответственности (Single Responsibility Principle)?
Класс должен выполнять только одну задачу.
S: Почему важен принцип единственной ответственности?
Упрощает понимание и изменение класса. Например, класс “Invoice” должен отвечать только за работу с фактурами, а не за отправку писем.
O: Что означает принцип открытости/закрытости (Open/Closed Principle)?
Класс должен быть открыт для добавления новой функциональности, но закрыт для изменения существующего кода.
O: Как применить принцип открытости/закрытости?
Вместо изменения класса, добавьте новый класс или метод. Например, если нужно добавить новый способ оплаты, создайте новый класс для этого способа, а не изменяйте старый.
L: Что означает принцип подстановки Лисков (Liskov Substitution Principle)?
Объекты подклассов должны заменять объекты суперклассов без проблем.
L: Пример принципа подстановки Лисков?
Если у вас есть класс “Bird” с методом “fly”, и подкласс “Sparrow”, который может летать, то при использовании объекта “Sparrow” вместо “Bird” программа должна работать корректно. Подкласс “Penguin” не должен наследовать метод “fly”, так как он нарушит принцип подстановки Лисков.
I: Что означает принцип разделения интерфейсов (Interface Segregation Principle)?
Не нужно заставлять класс реализовывать интерфейс, который ему не нужен.
I: Пример принципа разделения интерфейсов?
Вместо одного большого интерфейса “Worker” с методами “work” и “eat”, создайте два интерфейса: “Worker” с методом “work” и “Eater” с методом “eat”.