Согласовать с другими разработчиками и убедиться в отсутствии конфликтующих миграций на одной модели. Всегда актуализировать состояние миграций перед созданием новых.
Чтобы избежать конфликтующих миграций, которые могут вызвать проблемы с объединением и несоответствия в схеме базы данных.
Убедиться, что данная функциональность уже не реализована в проекте.
Использовать Django Rest Framework (DRF) и писать логику в приложении api, в пакетах views и serializers.
Предпочтительно использовать Generics или ModelViewSet. Используйте APIView только при необходимости.
Модели должны называться в единственном числе, а поля должны быть названы читабельно и понятно.
Назвать их так, чтобы по названию было понятно, что они делают.
A: Следовать PEP8, включать докстринги для всех классов и нетривиальных методов, комментировать сложный код и правильно управлять импортами.
Правильно: /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”.