Продумать, спроектировать, определить приоритеты, построить архитектуру
- Продумать - Прежде чем переходить к реализации, убедитесь, что все продумано.
- Спроектировать - Разработчик должен сначала завершить проектирование. После этого проект можно реализовать.
- Определите приоритеты - Разделите требования на несколько этапов, определите приоритеты, начинайте с этапа с наивысшим приоритетом.
- Построить архитектуру - Обсудите архитектуру проекта с командой и другими людьми, которые участвуют в проекте до старта.
Реализовывать только то что нужно, подчищать ненужный код, не добавлять функционал, о котором не просят
- Реализуйте только то, что нужно здесь и сейчас, а не в теории, что оно пригодится в будущем.
- Подчищайте ненужный код (найдите через Git историю при надобности).
- Не добавлять новый функционал, о котором его не просят (благими намерениями без должной проверки вы только добавите багов).
Не большие методы, каждый метод решает одну проблему
- Не большие методы (40-50 строк)
- Каждый метод решает одну проблему
- Модификация кода не должна вызывать трудностей
- Система работает лучше всего, если она не усложняется без надобности
- Не устанавливайте целую библиотеку ради одной функции из неё
- Не делай того, что не просят
- Писать код необходимо надежно и «дубово»
Избегать копирование кода, выносите общую логику
- Избегайте копирования кода
- Выносите общую логику
- Прежде чем добавлять функционал, проверьте в проекте, может, он уже создан
- Константы
Избегать копирование кода, выносите общую логику
- Не нужно создавать лишние сущности без необходимости в них.
- Всегда начинайте с максимально простого кода, затем увеличивайте сложность по мере необходимости.
Single responsibility, Open-closed, Liskov substitution, Interface segregation и Dependency inversion
- Single responsibility - На каждый объект должна быть возложена одна единственная обязанность
- Open-closed - Программные сущности должны быть открыты для расширения, но закрыты для модификации
- Liskov substitution - Объекты в программе могут быть заменены их наследниками без изменения поведения программы (Шаблонный метод в паттернах проектирования). Использование интерфейсов для отделения поведения
- Interface segregation - Много специализированных интерфейсов лучше, чем один универсальный
- Dependency inversion - Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций (зависимости должны строится относительно абстракций, а не деталей)
Предполагает создание минимально необходимой функциональности, которая помогает понять, как продукт работает в реальных условиях и нравится ли он пользователям.
Представляет собой его урезанную версию. Он используется на этапе до MVP и предназначен только для того, чтобы подтвердить или опровергнуть необходимость дополнительной функциональности. По сути, PoC — своего рода расходный материал, временный код. Его пишут не для реализации, а для демонстрации проекта. Включать PoC в реальный продукт, в принципе, можно, но имейте в виду, что для доказательства одной концепции, бывает, приходится создавать несколько PoC
