FTS — исполняемые спецификации Исполняемые утилиты FTS: правила, порядок и свойства
0%

Исполняемые утилиты FTS: правила, порядок и свойства

Исполняемые утилиты FTS: правила, порядок и свойства

Утилита — чистое детерминированное вычисление над одним объектом.

утилита «Рассчитать скидку»
  принимает Покупка
  возвращает деньги
  начинает с 0

Начальное значение обязательно: результат не появляется из неявного null.

Правила исполняются сверху вниз

правило «Большая покупка»
  если сумма не меньше 10000
  то добавить 10 процентов от поля сумма

правило «Постоянный клиент»
  если «постоянный клиент» равен да
  то добавить 5 процентов от поля сумма

Выполняются все правила, условия которых истинны. Это не цепочка if / else if. Для суммы 20 000 и постоянного клиента результат будет 3 000.

Условия соединяются строками и. Доступны равен, не равен, больше, меньше, не больше, не меньше. Действие может установить результат или прибавить значение.

Свойство — исполняемое постусловие

свойство «Скидка ограничена»
  результат не больше 20 процентов от поля сумма

Свойство не обрезает ошибочную скидку. Оно завершает выполнение диагностикой FTS_UTILITY_PROPERTY. Это принципиально: нарушение инварианта нельзя тихо превращать в другой бизнес-результат.

Семантика по шагам

  1. Результат получает начинает с.
  2. Правила рассматриваются сверху вниз.
  3. Подходящие действия меняют результат.
  4. Все свойства проверяются после правил.
  5. Вызывающая сторона получает значение либо структурированную ошибку.

Интерпретатор и сгенерированный TypeScript следуют одной последовательности.

Когда утилита подходит

Хорошие примеры: скидка, тариф, комиссия, классификатор, лимит, нормализатор, command decision. Плохие: «отправить письмо», «получить курс валют из сети», «записать заказ в транзакции». Внешние эффекты делают результат зависимым от мира и разрушают воспроизводимость.

Упражнение

Добавьте третье правило «промокод» и свойство верхнего предела. Затем намеренно сделайте сумму скидок больше предела. Убедитесь, что fts run падает, а не возвращает незаметно исправленное число.

Дальше: примеры как тесты

Нашли неточность? Выделите фрагмент текста — рядом появится жучок.

Нужен разбор именно вашей ситуации?

Статья описывает общий случай. Если у вас частный — можно разобрать его отдельно, платно. А если не хватает целого материала, предложите тему: её оплачивают вскладчину, и она выходит открытой для всех.

Доска запросов