Comments 12
Интересно было бы сравнить с frozen. А в целом — впечатления не очень, много бойлерплейта и лямбды с билдерами.
Спасибо за статью.
В реальных проектах я обычно использую pub.dev/packages/json_annotation
который сделан как раз при помощи built_value
Если посмотреть обучалки по Flutter, то команда рекомендует использовать его, так как для json он удобнее.
Удобнее добавлять вложенные классы (которые автоматически на любой уровень вложенности десериализуются), Enums, поверх удобно оборачивать другими сериализаторами.
Вот тут подробно от команды Flutter
flutter.dev/docs/development/data-and-backend/json
В реальных проектах я обычно использую pub.dev/packages/json_annotation
который сделан как раз при помощи built_value
Если посмотреть обучалки по Flutter, то команда рекомендует использовать его, так как для json он удобнее.
Удобнее добавлять вложенные классы (которые автоматически на любой уровень вложенности десериализуются), Enums, поверх удобно оборачивать другими сериализаторами.
Вот тут подробно от команды Flutter
flutter.dev/docs/development/data-and-backend/json
Зачем в 2020 году built_value, когда есть freezed? Он может все тоже самое и даже больше. Сериализация из коробки без лишнего кода, фабричные конструкторы, которыми удобно представлять различные сущности, как енум, но лучше. Фризед по всем параметрам лучше.
Согласен, сейчас как раз мигрируем с built_value
на freezed
, и он действительно практически по всем параметрам удобнее. Единственное, чего не хватает – удобной работы с коллекциями.
Интересно, изменилось ли мнение за полгода? Чем таки лучше freezed vs built_value? Сейчас в команде ведем дискуссию, что использовать
Не изменилось – freezed гораздо удобнее. Мы проект полностью перевели на freezed для моделей и, частично, для сложных DTO. Плюсы:
- стерилизацию он делегирует пакету json_serializable, которую мы уже используем для DTO;
- меньше бойлерплейта. Не котлиновские дата-классы, конечно, но хотя бы так:
@freezed class CountryGroup with _$CountryGroup { const factory CountryGroup({ required CountryGroupCode code, required String englishName, required Iterable<Country> countries, }) = _CountryGroup; }
- генерация coproduct типов.
замечательно
забыли об еще одном важном методе для десериализации _initializeBuilder, который позволяет задавать начальные значения, если таковые не нашлись в десериализуемом объекте. Пример:
забыли об еще одном важном методе для десериализации _initializeBuilder, который позволяет задавать начальные значения, если таковые не нашлись в десериализуемом объекте. Пример:
static void _initializeBuilder(LocalSettingsBuilder b) => b
..enableRestLogging = false
..enableWebSocketLogging = false;
Sign up to leave a comment.
Сериализация в JSON и иммутабельный объект. О пакете built_value для Flutter