Структуры и типы FTS: форма предметных данных
Структура описывает только наблюдаемые поля. Она не является классом и не содержит поведения.
категория «Счета»
структура «Строка счёта»
номер является строкой
сумма является деньгами
«срок оплаты» является датой
просрочен является признаком
комментарий иногда является строкой
Встроенные типы
| FTS | Канонический тип | JavaScript |
|---|---|---|
является строкой |
Строка |
string |
является числом |
Число |
number |
является датой |
Дата |
ISO-строка на границе |
является деньгами |
Деньги |
конечное number в текущем runtime |
является признаком |
Признак |
boolean |
иногда является … |
T | undefined |
поле может отсутствовать |
Деньги сейчас представлены конечным числом. Для валютной точности production- приложение должно заранее выбрать minor units или decimal-адаптер; FTS не исправляет IEEE 754 магически.
Состояние не является вложенной структурой
объект Заказ
«готов к отгрузке» является состоянием «Готов к отгрузке»
Здесь «Готов к отгрузке» — тип свидетельства. Если у заказа действительно
есть составной адрес, используйте вложенность:
объект Заказ
вложен объект «Адрес доставки»
Во что превращается структура
compile(source) возвращает массив structures. Адаптер может превратить поля
в UI без повторного перечисления:
const controls = document.structures
.find(({ name }) => name === "Строка счёта")
.fields.map((field) => ({
name: field.name,
required: !field.type.includes("undefined"),
control: field.type === "Признак" ? "checkbox" : "text",
}))
Это не означает, что FTS знает весь дизайн формы. Layout, подсказки, async- валидация и доступность остаются ответственностью UI-компонента. FTS устраняет дублирование имён, типов и обязательности.
Упражнение
Опишите объект из своей системы с пятью полями. Скомпилируйте его и создайте
два адаптера: список form controls и список table columns. Оба должны читать
один FtsDocument, а не исходный текст регулярными выражениями.