Pull to refresh
4K+
2
Arutyun Tatulyan@haru_t

Engineering Manager, Python Developer

3
Rating
1
Subscribers
Send message

Невыразимое невалидное. Часть 2. Поведение и границы

Level of difficultyMedium
Reading time5 min
Reach and readers4.6K

В первой части мы разобрались с представлением данных. Мы сделали невалидные состояния невозможными для выражения в рамках модели. В этой части мы разберемся с тем как можно выражать поведение таких моделей, и где проходит граница между тем, что ловит чекер, и тем, что придется оставить рантайму.

Читать далее

Невыразимое невалидное. Часть 1. Данные

Level of difficultyMedium
Reading time8 min
Reach and readers6.8K

Знакомый сценарий: фильтр или конструктор запросов начинается с одного опрятного класса, а через месяц в нём value: Any, валидатор на сотню строк и ветка, дописанная ночью перед релизом, — её забыли покрыть тестом, и она падает в проде.

Разбираем контринтуитивный выход: не «добавить ещё проверок», а сделать невалидное состояние таким, чтобы его нельзя было даже собрать. В первой части — сами данные: сумма-типы, дискриминированные union’ы и точные значения в pydantic; и где всё это ловит тайп-чекер, а где остаётся рантайму.

Читать далее

Information

Rating
1,600-th
Registered
Activity

Specialization

Бэкенд разработчик, Архитектор программного обеспечения
Ведущий
From 10,000 $