Skip to content

🧱 Проектирование собственного типа градиента ​

В этом разделе показано, как спроектировать кастомный градиент с помощью gradiente и Pattern DSL.
Путь простой: идея → паттерн → валидация → реальное использование.

🎯 Цель ​

Тип градиента определяется через ответы на три вопроса:

  • Какие входные данные допустимы?
  • Какой структуре они должны следовать?
  • Насколько строгой должна быть валидация?

🧠 Шаг 1 - Определить идею ​

Начать лучше с понятной концепции.

Пример ​

Градиент, который:

  • может иметь опциональное направление
  • должен иметь минимум два color-stop
  • может содержать color-hint

📌 Шаг 2 - Перевести идею в структуру ​

Разбиваем идею на правила:

bash
config → опционально
color-stop → обязателен
color-stop → обязателен
color-hint → опционален между стопами

🧩 Шаг 3 - Собрать паттерн ​

Начинаем с простого:

ts
^[color-stop,color-stop].

Затем расширяем:

ts
^[([config,color-stop]|color-stop),~color-stop].

Затем добавляем поддержку hint:

ts
^[([config,color-stop,([color-hint,color-stop]|color-stop)]|color-stop),~([color-hint,color-stop]|color-stop)].

🧠 Шаг 4 - Проверить логику ​

Проверяем паттерн вопросами:

  • Может ли hint появиться без стопа? ❌
  • Может ли config существовать без достаточного количества стопов? ❌
  • Может ли паттерн завершиться некорректно? ❌

Если да - паттерн нужно уточнить.

🧪 Шаг 5 - Протестировать примеры ​

Валидные ​

bash
color-stop, color-stop
config, color-stop, color-stop
color-stop, color-hint, color-stop

Невалидные ​

bash
config ❌
color-stop, color-hint ❌
config, color-stop ❌

🔄 Шаг 6 - Связать с реальными значениями ​

Паттерн работает с типами:

bash
config → to left
color-stop → red 10%
color-hint → 50%

Пример ​

css
linear-gradient(to left, red 10%, 50%, blue 80%)

🧩 Шаг 7 - Интегрировать в систему ​

Когда паттерн определён, можно:

  • валидировать пользовательский ввод
  • строить редакторы
  • генерировать градиенты
  • нормализовать данные

🧠 Стратегии проектирования ​

Строгий дизайн ​

Используется, когда:

  • рендер всегда должен быть корректным
  • невалидные состояния должны быть невозможны

Гибкий дизайн ​

Используется, когда:

  • строится редактор
  • допускается частичный ввод
  • ввод пользователя происходит постепенно

🔁 Итерационный процесс ​

Проектирование происходит итеративно:

bash
идея → паттерн → тест → уточнение

Сначала простая структура, затем ограничения.

🧠 Ментальная модель ​

Паттерн можно воспринимать как:

bash
программу, которая валидирует поток входных данных

А не просто как структуру.

🔗 Использовать playground ​

Проектировать паттерны намного проще с визуализацией.

👉 Открыть DSL Playground →

🚀 Главный вывод ​

Тип градиента определяется:

  • структурой через DSL
  • ограничениями
  • сценарием использования

С Gradiente DSL всё это находится под контролем.

💡 Финальная мысль ​

Градиенты - это не строки. Это структурированные системы.