e22m4u 4 дней назад
Родитель
Сommit
b95d716ac4
1 измененных файлов с 31 добавлено и 29 удалено
  1. 31 29
      README.md

+ 31 - 29
README.md

@@ -9,18 +9,19 @@ JavaScript модуль для работы с проекцией данных.
 ## Содержание
 
 - [Установка](#установка)
-- [Использование](#использование)
-  - [Функция `projectData`](#функция-projectdata)
-    - [Создание проекции](#создание-проекции)
-    - [Проекция массива](#проекция-массива)
-    - [Строгий режим](#строгий-режим)
-    - [Вложенные схемы](#вложенные-схемы)
-    - [Область проекции](#область-проекции)
-    - [Фабричные функции](#фабричные-функции)
-    - [Именованные схемы](#именованные-схемы)
-  - [Класс `DataProjector`](#класс-dataprojector)
-    - [Метод `defineSchema`](#метод-defineschema)
-    - [Метод `project`](#метод-project)
+- [Функция `projectData`](#функция-projectdata)
+  - [Создание проекции](#создание-проекции)
+  - [Проекция массива](#проекция-массива)
+  - [Строгий режим](#строгий-режим)
+  - [Вложенные схемы](#вложенные-схемы)
+  - [Область проекции](#область-проекции)
+  - [Фабричные функции](#фабричные-функции)
+  - [Именованные схемы](#именованные-схемы)
+- [Класс `DataProjector`](#класс-dataprojector)
+  - [Метод `defineSchema`](#метод-defineschema)
+    - [Регистрация именованных схемы](#регистрация-именованных-схем)
+  - [Метод `project`](#метод-project)
+    - [Применение именованных схем](#применение-именованных-схем)
 - [Тесты](#тесты)
 - [Лицензия](#лицензия)
 
@@ -30,11 +31,7 @@ JavaScript модуль для работы с проекцией данных.
 npm install @e22m4u/js-data-projection
 ```
 
-## Использование
-
-Модуль экспортирует функцию создания проекции `projectData`.
-
-### Функция `projectData`
+## Функция `projectData`
 
 Функция создает проекцию данных на основе переданного объекта схемы.
 Принимает исходные данные и дополнительные опции для управления режимом
@@ -411,7 +408,7 @@ console.log(result);
 ```
 
 
-### Класс `DataProjector`
+## Класс `DataProjector`
 
 Для централизованного управления схемами и удобной работы в рамках
 сервис-ориентированной архитектуры модуль предоставляет класс `DataProjector`.
@@ -451,9 +448,10 @@ defineSchema(schemaDef)
 
 Текущий экземпляр `DataProjector`.
 
-**Примеры:**
+#### Регистрация именованных схем
 
-Регистрация именованной схемы.
+Ниже приводится пример регистрации простой схемы под именем `user`. После
+выполнения этого кода схема сохраняется в памяти экземпляра проектора.
 
 ```js
 import {DataProjector} from '@e22m4u/js-data-projection';
@@ -470,7 +468,9 @@ projector.defineSchema({
 });
 ```
 
-Регистрация вложенных схем.
+Метод позволяет регистрировать схемы, которые ссылаются друг на друга.
+В примере ниже схема `user` использует схему `address` для проекции
+вложенного объекта.
 
 ```js
 import {DataProjector} from '@e22m4u/js-data-projection';
@@ -536,9 +536,10 @@ project(schemaOrFactory, data, [options])
 Метод возвращает проекцию исходных данных в соответствии с переданной схемой
 и настройками.
 
-**Примеры:**
+#### Применение именованных схем
 
-Использование зарегистрированной схемы.
+В данном примере вместо передачи объекта схемы используется имя `publicUser`. Проектор находит соответствующее определение в своем реестре и применяет
+его к указанным данным.
 
 ```js
 import {DataProjector} from '@e22m4u/js-data-projection';
@@ -570,7 +571,8 @@ console.log(result);
 // }
 ```
 
-Использование вложенных именованных схем.
+Проектор автоматически обрабатывает зависимости между схемами. Когда схема
+`user` применяется к данным, проектор видит ссылку на схему `address` во вложенном поле и использует её для обработки адреса.
 
 ```js
 import {DataProjector} from '@e22m4u/js-data-projection';
@@ -586,13 +588,13 @@ projector.defineSchema({
   },
 });
 
-// регистрация основной схемы, использующей вложенную по имени
+// регистрация основной схемы
 projector.defineSchema({
   name: 'user',
   schema: {
     name: true,
-    contact: {
-      select: true,      // поле будет включено в результат
+    address: {
+      select: true,      // видимость поля address
       schema: 'address', // <= имя вложенной схемы
     },
   },
@@ -600,7 +602,7 @@ projector.defineSchema({
 
 const data = {
   name: 'Fedor',
-  contact: {
+  address: {
     city: 'Moscow',
     zip: 123456,
   },
@@ -612,7 +614,7 @@ const result = projector.project('user', data);
 console.log(result);
 // {
 //   name: 'Fedor',
-//   contact: {
+//   address: {
 //     city: 'Moscow'
 //   }
 // }