Конспект доклада «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 для ввода ответа. Разбираются возможные варианты проектирования модели данных с постепенным добавлением функционала.
[12:31] затронут момент, как можно достичь «хотя бы 1 вопрос должен существовать» в List вопросов. Заметьте, мы не проверяем List.length, а мы заранее хотим сделать так, чтобы было невозможно оставить List вопросов пустым!
[14:40] Упомянута структура zip-лист (гугл), о которой стоит почитать отдельно.
[18:46] вариант деструктурирования кастом-тайпа с одним вариантом:
Если вы уже знакомы с Elm, то вероятно заметили заготовку для непрозрачного типа (opaque type).
[21:24] — делаем последнюю фичу доклада — Status bar. Где столкнемся с уже знакомой проблемой: в модели у нас два предустановленных типа (2 maybe), которые в результате дают 4 комбинации. Но! Не все эти комбинации возможны в реальном приложении. Вывод: лучше сделать свой кастомный тип, со всеми возможными вариантами (коих в докладе 3, а не 4).
Итого: отличный доклад, куча разных техник по созданию различных моделей в elm. Рекомендую к просмотру.