Данные и источники данных
Основные понятия
Для описания объектной модели в Honey Platform используются понятия класса (class), связи (link) и объекта.
Объект
В отличие от общепринятых ORM-подходов (уточнить так ли это), где объектом является экземпляр некоторого класса, идентификатор, как правило, является уникальным ключом объекта, в Honey Platform используется подход, позволяющий наделить любой объект произвольным набором классов.
Обязательным атрибутом объекта будет являться его идентификатор - Id. Это строковое значение.
Класс
Под классом в платформе понимается некая роль (ипостась, функциональность), которой можно наделить объект. Класс содержит наименование, источник данных (по умолчанию) и список значений (Properties).
Класс описывается в файле с расширением class (в основном проекте или в модуле) (дать ссылку на модули и структуру проекта) в формате yaml (пока используется json).
Пример описания класса
Name: Person
DataSource: person_storage
Properties:
- Name: FullName
Type: string
- Name: Age
Type: decimal
- Name: Sex
Type: @Sex В примере выше описан класс с именем Person. Имя класса должно быть уникальным для всего проекта.
Далее указан источник данных по умолчанию - PersonStorage. По умолчанию - так как данное значение может быть переопределено для конкретного контура.
Ещё ниже указан список значений - Properties. Список может быть пустым.
Каждое значение имеет два обязательных параметра - Name и Type. Список остальных полей и список всех типов описан в разделе Properties (дать ссылку, возможно. переименовать).
Если тип значения начинается с символа @ - это означает, что свойство будет одним из типов, определённым пользователем - Enum или Record. Иначе необходимо использовать один из встроенных типов данных.
Если объект наделяется классом, содержащим непустой список значений, для него создаются данные по классу (звучит криво, подобрать термин покрасивее) - ClassValues, которые будут управляться источником данных.
Источник данных (DataSource)
DataSource - источник данных - сервис, который отвечает за хранение, выдачу и изменение данных по классу (ClassValues), а так же данных по связям между объектами (link).
Один источник данных может обрабатывать множество различных данных по различным классам и линкам. Источник данных может как только хранить данные (readonly), так и предоставлять возможность для изменения (write).
Описание источника данных задаётся в файле с расширением datasource в формате yaml или json. Некоторые данные могут быть изменены для конкретных контуров.
Пример
{
"Name": "person_storage",
"Type": "file",
"Parameters": {
"resourcename": "person_storage_data"
}
}В примере выше описан источник данных с именем person_storage. Имя должно быть уникальным в рамках проекта.
Далее описан тип источника данных - Type и список параметров Parameters, соответствующий выбранному типу.
Тип источника данных может быть либо одним из стандартных, либо пользовательским (тип custom).
Стандартные источники данных:
Тип file - данные описываются в json иди yaml формате, в файле, хранящимся в ресурсах. Источник read-only. Обязательный параметр - resourcename - указывает имя ресурса.
Тип honey-db - данные располагаются в указанной базе данных, управляются встроенным модулем.
Именованные связи (Links)
Связи между объектами хранятся в виде отдельных сущностей, называемых Именованные связи или Линки.
Линки описываются в JSON (в будущем ещё и yaml) формате в файле с расширением link.
{
"Name": "person_to_department",
"DataSource": "person_storage",
"From": "Person",
"To": "Department"
}В примере выше описывается именованная связь person_to_department, экземпляры которого хранятся в источнике данных person_storage. Линки person_to_department могут быть только между объектами, первый из которых обладает классом Person, а второй - Department.
Именованная связь всегда направлена от From-класса к To-классу. Классы могут совпадать. При необходимости сделать связь равнозначной (реверсной?) требуется создать новую связь, где значения From и To будут переставлены местами.
Источники данных по умолчанию не отвечают за целостность и консистентность данных. Для этих целей нужно использовать механизмы, которые придумаем и опишем позже.
Работа с данными
Миграции
Описать кратко про миграции классов и линков.
Распределённые транзакции
Описать про транзакции в процессах, про блокировки и обработку исключений
Запрос данных из нескольких источников данных
Описать, что источники данных должны уметь ходить в другие источники за данными. (Придумать и описать универсальный язык запросов)
Изменение данных
Подумать, есть ли какие нюансы и вписать сюда. Привести пример запросов на изменение данных
Пример
Ниже нужно будет описать пример с несколькими классами - Peron, User, Employee, возможно ContactPerson, а также классом Department и необходимыми связями user_to_department, employee_to_manager и прочими
К примеру, нам нужно описать модели людей, каким-либо образом использующихся в корпоративном портале. Для нам люди могут быть:
Персонами (Person) с персональными данными
Пользователями портала (User)
Контактными лицами для связи (ContactPerson)
Сотрудниками компании (Employee)
Опишем классы.
Last updated