«Игровой цикл» Вяза

Это основа веб-приложения, написанного на языке Elm (https://elm-lang.org/). Этот цикл происходит каждый раз, когда что-то происходит. Что-то преобразуется в сообщение (Msg) и отправляется в функцию update (контроллер) вместе с Моделью. Модель содержит все состояние приложения (единственный источник истины). Функция обновления, основанная исключительно на модели и сообщении, может изменить модель и создать один или несколько команды (Cmd). Команды затем выполняются средой выполнения Elm, в то время как новая модель используется для обновления интерфейса приложения после обработки функцией view. Это вкратце все, что вам нужно знать об архитектуре Elm.

Шаги

  1. Что-то случилось (пример: пользователь нажимает кнопку)
  2. Сообщение (Msg) создается
  3. Msg + Model отправляются на update
  4. update вернуть новый Model и необязательную команду (Cmd)
  5. Cmd отправляется в механизм эффектов и выполняется (пример: HTTP-запрос)
  6. Новый Model отправлен на view
  7. view вернуть новый HTML
  8. Новый html используется для обновления веб-страницы
  9. Перейти к шагу 1

Примечания

  • Два раздела в небезопасной области (DOM и Effect) похожи в том смысле, что оба вызывают побочный эффект и генерируют сообщения. Разница в том, что DOM изменяет страницу на основе Model+view, а эффекты генерируют эффект на основе Cmd
  • в Elm 0.19 view может возвращать Document msg вместо Html msg, но концепция та же
  • Безопасная зона - это зона, не имеющая побочных эффектов. Здесь все в чистом и это область, в которой мы пишем наш код.
  • Небезопасная область - напротив - здесь наблюдаются побочные эффекты. Мы позволяем Вязу справиться с этой опасной зоной
  • Когда я говорю «Msg и Model отправляются в update», я действительно имею в виду, что среда выполнения Elm вызывает функцию update с сообщением и моделью в качестве параметра, как в: update msg model
  • Подписки - это еще один инструмент, с помощью которого можно отправлять сообщения. Их нет в анимации, но они ведут себя так же, как Эффект и DOM. Сообщения отправляются из подписок на события Javascript, например изменение размера браузера или отправка данных через порт. Подпись типа subscriptions : model -> Sub msg
  • Сигнатура типа для обновления: update : msg -> model -> ( model, Cmd msg ).
  • Сигнатура типа для представления: view : model -> Html msg.

Для получения дополнительных сведений об архитектуре Вяза ознакомьтесь с отличным официальным руководством: https://guide.elm-lang.org/architecture/