Делайте невозможное состояние невозможным в Elm

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

Конспект доклада «Making Impossible States Impossible» by Richard Feldman

делайте невозможное состояние невозможным

Короткий (25 минут) доклад, в котором можно подсмотреть различные идеи для создания «невозможного состояния».

Ключевая идея «impossible state», в том, что с помощью модели данных в Elm мы должны стремиться к тому, чтобы эту модель нельзя было представить в виде «некорректного» состояния.

(пояснение от меня): Грубо говоря, если у вас в приложении есть 2 чекбокса и выбран должен быть только один, то «2 выбранных чекбокса» в один момент времени — невозможное состояние. Следовательно, нам нужно спроектировать модель так, чтобы это было невозможно, чтобы компилятор ругался и подсказывал.

Первая ситуация, которую рассматривает Ричард — модель данных из elm-css. Обычный type alias record заменяется на более подробную структуру.

С помощью такого разделения удалось разделить Declaration на различные сущности. Теперь легче проверить валидность будущего css файла, так как «импорты», «неймспейсы» и непосредственно сами стили — разные типы. Было же — все в кучу.

Далее проскальзывает мысль: тестирование — это хорошо, но «невозможность» еще лучше. Так как и тестировать не нужно.

[8:11] Чем лучше Data Model тем чище API

Затем разбирается приложение «Опрос», в котором мы хотим отображать вопрос(ы) и textarea для ввода ответа. Разбираются возможные варианты проектирования модели данных с постепенным добавлением функционала.

проектируйте невозможное состояние в Elm

[12:31] затронут момент, как можно достичь «хотя бы 1 вопрос должен существовать» в List вопросов. Заметьте, мы не проверяем List.length, а мы заранее хотим сделать так, чтобы было невозможно оставить List вопросов пустым!

[14:40] Упомянута структура zip-лист (гугл), о которой стоит почитать отдельно.

[18:46] вариант деструктурирования кастом-тайпа с одним вариантом:

Если вы уже знакомы с Elm, то вероятно заметили заготовку для непрозрачного типа (opaque type).

работаем с opaque типом в elm

[21:24] — делаем последнюю фичу доклада — Status bar. Где столкнемся с уже знакомой проблемой: в модели у нас два предустановленных типа (2 maybe), которые в результате дают 4 комбинации. Но! Не все эти комбинации возможны в реальном приложении. Вывод: лучше сделать свой кастомный тип, со всеми возможными вариантами (коих в докладе 3, а не 4).

Итого: отличный доклад, куча разных техник по созданию различных моделей в elm. Рекомендую к просмотру.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: