Думаем как Solid¶
Дизайн Solid включает в себя различные точки зрения на принципы и ценности, которые помогают нам создавать лучшие веб-сайты и приложения. Знание этих основополагающих принципов облегчает изучение и использование Solid.
Именно эти принципы будут рассмотрены в данном разделе. Для того чтобы все поняли эти концепции, мы будем говорить о них на высоком уровне.
1. Декларативное программирование¶
Декларативное программирование - это практика написания компьютерного кода, который объясняет, что должен сделать компьютер, а не как это сделать. Это все равно, что сказать повару приготовить омлет - он знает, что делать.
Императивное программирование объясняет компьютеру, как сделать что-то шаг за шагом. Это все равно, что сказать кому-то, как приготовить омлет: "Сначала возьмите два яйца. Затем взбейте яйца в миске вилкой. Растопите немного масла на сковороде, затем добавьте яйца". Вы даете конкретные инструкции по приготовлению омлета.
Давайте кратко рассмотрим каждый из этих подходов.
Декларативный¶
1 2 |
|
В приведенном выше коде мы имеем массив чисел numbers
. Затем с помощью функции map
мы создаем новый массив double
, содержащий значения numbers
, умноженные на 2.
Функция map
является декларативной функцией, поскольку она позволяет указать преобразование, которое будет применено к каждому элементу массива, не указывая при этом, как это преобразование будет реализовано.
Императивный¶
1 2 3 4 5 6 |
|
В приведенном выше коде мы используем цикл for для поочередного перебора всех элементов массива. Внутри цикла мы используем метод push
для добавления результата удвоения каждого числа в новый массив double
.
Такой подход считается императивным, поскольку мы намеренно перебираем в цикле каждое число в массиве и заносим результат удвоения в новый массив. Задача решается та же самая, но код получается более сложным и утомительным.
Solid использует декларативный подход к программированию в различных областях, чтобы сделать его более удобным и понятным. Этот подход делает акцент на формулировке желаемого результата, а не на способе его достижения, что делает его менее сложным и более быстрым в освоении и использовании.
2. Исчезающие компоненты¶
Без учета обновлений структурировать компоненты достаточно сложно. Обновления в Solid обрабатываются независимо от компонентов. Функции компонентов вызываются только один раз, после чего исчезают. Компоненты существуют для организации кода, а не для работы с обновлениями или рендерингом. Вот краткая диаграмма того, как выглядит этот процесс:
3. Разделение чтения и записи¶
При создании систем наличие точного контроля и предсказуемости данных приводит к улучшению качества работы разработчиков (DX) при использовании этих систем. Для обеспечения однонаправленного потока данных в таких системах нам не нужна полная неизменяемость, а достаточно иметь возможность контролировать, кто может или не может записывать или изменять данные.
Solid делает это с помощью реализации своих примитивов. Примерами таких примитивов являются createStore
, createSignal
и другие.
Рассмотрим пример того, что мы понимаем под разграничением чтения и записи.
1 2 3 4 5 6 7 |
|
В приведенном выше фрагменте кода мы используем один из примитивов Solids - createSignal
. Вкратце, вызов этого примитива создает реактивное значение, а в ответ на вызов этого примитива возвращаются два параметра: геттер и сеттер. Обратите внимание, что name
(геттер) отделен от setName
(сеттер). Это лишь один из способов, которым Solid разделяет вещи.
4. Простота лучше, чем легкость¶
Использование явных и последовательных соглашений, даже если они требуют больших усилий, полезно для построения надежных систем. Это важный урок компактной реактивности. Solid стремится предоставить минимальные инструменты, которые служат основой для дальнейшего развития. Это соответствует причине, по которой Solid придерживается скорее декларативного, чем императивного подхода.