Ответ
Я регулярно участвую в код-ревью как в качестве автора, так и ревьювера. Для меня это не просто формальность, а ключевой инструмент для поддержания качества кода и обмена знаниями в команде Flutter-разработчиков.
На что я обращаю внимание при ревью кода на Dart/Flutter:
-
Производительность и эффективность Flutter:
- Избегает ли код лишних перестроений (
build)? Используются лиconstконструкторы где возможно? - Правильно ли управляются подписки на
Stream'ы илиChangeNotifier'ы (отписка вdispose)? - Нет ли
print-отладочных операций в продакшн-коде?
- Избегает ли код лишних перестроений (
-
Архитектура и читаемость:
- Следует ли код выбранному паттерну (например, BLoC, Provider, Riverpod)? Логика отделена от UI?
- Названия переменных, методов и виджетов понятны и следуют Dart conventions (
lowerCamelCase,UpperCamelCase). - Сложная бизнес-логика прокомментирована.
-
Обработка ошибок и edge cases:
- Есть ли обработка ошибок сетевых запросов (через
try/catchили.onError)? - Учитываются ли состояния загрузки и пустых данных?
- Есть ли обработка ошибок сетевых запросов (через
Пример замечания из реального ревью:
Было (потенциальная проблема):
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: _fetchData(), // Future создается при каждом build!
builder: (context, snapshot) { ... },
);
}
Предложил исправить: Инициализировать Future в initState() или использовать FutureBuilder с ключом, либо, что лучше, вынести логику в Cubit/Bloc.
Я всегда стремлюсь давать конструктивную обратную связь, задавая вопросы ("Как ты думаешь, что произойдет, если...?") и предлагая конкретные альтернативы или ссылки на документацию.