Базовые сущности. Model, Record
Types/entity:Record
Запись — обертка над данными, которые можно представить в виде строки таблицы (упорядоченный набор именованных полей и их значений).
Термины
- формат полей — описание последовательности, названия, типа и прочих характеристик набора полей записи.
Возможности
- использование сырых данных в разных форматах;
- чтение/запись значения поля по имени;
- проверка существования поля;
- последовательный перебор полей;
- манипуляции с форматом полей;
- сериализация/десериализация;
- поддержка шаблона проектирования "Издатель-подписчик".
Важно
По умолчанию используется адаптер для данных в формате JSON. Если вы используете данные в каком-либо другом формате (СБИС-JSON, XML), то нужно подключить соответствующий адаптер.
Примеры
Создадим запись с сырыми данными в формате JSON:
// TypeScript
import {Record} from 'Types/entity';
const employee = new Record({
rawData: {
id: 1,
firstName: 'John',
lastName: 'Smith'
}
});
// 1
const id = employee.get('id');
// John
const firstName = employee.get('firstName');
Создадим запись с сырыми данными в формате СБИС-JSON:
// TypeScript
import {Record, adapter} from 'Types/entity';
const serverResponse = {
_type: 'record',
d: [1, 'John', 'Smith'],
s: [
{n: 'id', t: 'Число целое'},
{n: 'firstName', t: 'Строка'},
{n: 'lastName', t: 'Строка'}
]
};
const employee = new Record({
rawData: serverResponse,
adapter: new adapter.Sbis()
});
// 1
const id = employee.get('id');
// John
const firstName = employee.get('firstName');
Types/entity:Model
Модели обеспечивают доступ к данным и поведению объектов предметной области (сущностям). Такими сущностями могут быть, например, товары, пользователи, документы — и другие предметы окружающего мира, которые вы моделируете в своем приложении.
Возможности
Абстрактная модель обладает всеми возможностями Record.
Дополнительные возможности:
- определение собственных свойств сущности (пример: поле "Фамилия и инициалы" сущности "Пользователь" рассчитывается по полям "Фамилия", "Имя", "Отчество");
- наличие уникального идентификатора сущности среди ей подобных.
Поведенческие аспекты каждой сущности реализуются ее прикладным модулем путем наследования от абстрактной/промежуточной модели.
Прикладные модели могут внедряться в порождающие их объекты, такие как источники данных или рекордсеты. Это позволяет использовать свои модели в контролах.
Примеры
Определим модель пользователя:
// My/application/model/User.ts
import {Model} from 'Types/entity';
import {Salt} from 'My/application/cryptography';
export default class User extends Model {
_$format: [
{name: 'login', type: 'string'},
{name: 'salt', type: 'string'}
],
_$idProperty: 'login',
authenticate(password) {
return Salt.encode(`${this.get('login')}:${password}`) === this.get('salt');
}
}
Создадим модель пользователя и вызовем ее метод:
// My/application/controller/auth.ts
import User from 'My/application/model/User';
const user = new User();
user.set({
login: 'i.c.wiener',
salt: 'grhS2Nys345fsSW3mL9'
});
const authOk = user.authenticate('Its pizza time!');