Skip to content

Commit f740c73

Browse files
committed
Добавил описание
1 parent 6167f2c commit f740c73

File tree

1 file changed

+127
-1
lines changed

1 file changed

+127
-1
lines changed

README.md

Lines changed: 127 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,129 @@
11
# Версионирование правил КД2
22

3-
Разбор для версионирования в гит правил конвертации, правил регистрации в удобочитаемом виде.
3+
Разбор правил конвертации, правил регистрации в читаемом и удобном для анализа виде для хранения и версионирования в GIT.
4+
5+
6+
## Как пользоваться
7+
8+
1. Ручной разбор правил (команда `rulexport export`)
9+
2. Автоматический разбор в гит-репозитории (команда `rulexport install`)
10+
11+
### Ручной разбор правил:
12+
Выполняет разбор произвольного файла командой
13+
```
14+
rulexport export
15+
--schema=ИмяФайлаСхемы.json
16+
--path=ПапкаРазбора
17+
ИМЯ_ФАЙЛА_ПРАВИЛ.xml
18+
```
19+
20+
### Автоматический разбор правил:
21+
Выполняет разбор с помощью хука `pre-commit` всех файлов КД2 добавленных индекс гит-репозитория.
22+
Хук устанавливается в репозиторий командой:
23+
```
24+
rulexport install
25+
--schema=ИмяФайлаСхемы.json
26+
--src=ПапкаРазбора
27+
ПУТЬ_К_РЕПОЗИТОРИЮ
28+
```
29+
30+
*Особенности работы хука:*
31+
- Выполняет разбор только тех файлов, которые являются файлами КД2, которые добавлены в индекс.
32+
- Если файл добавлен в индекс и имеет изменения вне индекса, то будет выдано исключение.
33+
- Вне индекса файлы не обрабатываются.
34+
- Если файл правил удаляется или переименовывается, то соотвествующая ему папка с разобранными правилами удаляется.
35+
36+
## Что такое СХЕМА и как это работает?
37+
38+
Алгоритм выполняет обработку правил согласно схемы.
39+
По задумке модификацию разбора правил, добавления обработки дополнительных узлов можно производить только изменяя файл схемы `schema.json` не модифицируя код алгоритма.
40+
41+
Алгоритм рекурсивно обходит структуру схемы и выполняет действия каждого "узла".
42+
43+
*Узел схемы влючает в себя следующие поля:*
44+
- `Область` - произвольное описание действия (не используется в алгоритмах)
45+
- `ИмяПапки` - создает папку, в которую помещает результат обработки узла
46+
- `Совпадения` - поиск совпадений Regex (коллекция) в тексте итерации.
47+
- `ИменованныеГруппы` - имена именованных групп `Совпадения`, которые будут использованы для автозамены в полях `ЗаменитьНа` и `ИмяФайла` текста "<ИмяГруппы>" за значение из найденного совпадения
48+
- `ЗаменитьНа` - выражение для замены совпадения (использует автоподставновку именованных групп)
49+
- `ИмяФайла` - имя файла, в который будет сохранен каждый элемент коллекции совпадений (использует автоподставновку именованных групп)
50+
- `ИмяПапкиПодчиненных` - создает папку для каждого элемента `Совпадения` (использует автоподставновку именованных групп текущего узла). Дополняет путь `ИмяПапки`, может использоваться как вместо, так и вместе с `ИмяПапки`. Пример, когда может понадобиться данное поле - создание папок для каждого ПКО с вложенными файлами свойств и т.п.
51+
- `ПодчиненныеЭлементы` - массив подчиненных узлов
52+
53+
В текущей реализации схема копируется в репозиторий. Для каждого репозитория можно использовать свою схему.
54+
## Почему не другие готовые решения?
55+
56+
Целью решения было нахождение баланса между "версионируем файл целиком" и "версионируем каждый узел как отдельный файл".
57+
Оба варианта имеют недостатки.
58+
В первом случае проблемой является изменение порядка узлов.
59+
Во втором - слишком большое количество мелких файлов, глубина иерархии, длинные пути
60+
61+
Предлагаемый способ хранения (согласно дефолтной схеме) в виде дерева:
62+
```
63+
│ НашиПравилаКонвертации.xml
64+
├───Алгоритмы
65+
│ │ Алгоритмы.xml
66+
│ └───Алгоритмы
67+
│ Алгоритм-ВыгрузитьОстаткиМатериалов.xml
68+
│ Алгоритм-ВыгрузитьОстаткиНоменклатурыПоСчету.xml
69+
│ Алгоритм-ВыгрузитьОстаткиТМЦвЭксплуатации.xml
70+
│ Алгоритм-ВыгрузитьОстаткиТоваров.xml
71+
├───Запросы
72+
│ │ Запросы.xml
73+
│ └───Запросы
74+
│ Запрос-ОстаткиМатериалов.xml
75+
│ Запрос-ОстаткиОС.xml
76+
├───Общее
77+
│ ПередВыгрузкойДанных.xml
78+
│ ПередЗагрузкойДанных.xml
79+
│ ПередКонвертациейОбъекта.xml
80+
│ ПослеЗагрузкиДанных.xml
81+
│ ПослеЗагрузкиПараметров.xml
82+
│ ПослеЗагрузкиПравилОбмена.xml
83+
├───Параметры
84+
│ Параметры.xml
85+
├───ПравилаВыгрузкиДанных
86+
│ ПВД-Банки.xml
87+
│ ПВД-БанковскиеСчета.xml
88+
│ ПВД-Валюты.xml
89+
└───ПравилаКонвертацииОбъектов
90+
│ ПравилаКонвертацииОбъектов.xml
91+
└───Правила
92+
ПКО-АвансовыйОтчет.xml
93+
ПКО-Банки.xml
94+
ПКО-Валюты.xml
95+
ПКО-ВводОстатков.xml
96+
```
97+
Основной принцип:
98+
в исходном тексте удаляются (заменяются) `Совпадения` и сохраняются в файл `ИмяФайла`.
99+
Получаем на верхних уровнях файлы-оглавления, в которых версионируем иерархию в группах, порядок, состав подчиненных элементов.
100+
101+
Пример файла "Алгоритмы.xml"
102+
```
103+
<Алгоритмы>
104+
<Группа Имя="Выгрузка">
105+
<Алгоритм Имя="ВыгрузитьОстаткиМатериалов"></Алгоритм>
106+
<Алгоритм Имя="ВыгрузитьОстаткиНоменклатурыПоСчету"></Алгоритм>
107+
<Алгоритм Имя="ВыгрузитьОстаткиТМЦвЭксплуатации"></Алгоритм>
108+
<Алгоритм Имя="ВыгрузитьОстаткиТоваров"></Алгоритм>
109+
</Группа>
110+
<Группа Имя="Загрузка">
111+
<Группа Имя=".....">
112+
<Алгоритм Имя="....."></Алгоритм>
113+
<Алгоритм Имя="....."></Алгоритм>
114+
<Алгоритм Имя="....."></Алгоритм>
115+
</Группа>
116+
<Алгоритм Имя="....."></Алгоритм>
117+
<Алгоритм Имя="....."></Алгоритм>
118+
<Алгоритм Имя="....."></Алгоритм>
119+
</Группа>
120+
</Алгоритмы>
121+
```
122+
123+
*А где отдельные свойства ПКО, а отдельные алгоритмы обработчиков свойств?*
124+
Это несложно добавить в схему самостоятельно.
125+
Проба разбора свойств ПКО в отдельные файлы (в подпапку ПКО-ХХХ) превратила разобранные файлы в плохо анализируемый винегрет. Поэтому в дефолтной схеме детализация до ПКО.
126+
127+
## Где сборка правил?
128+
129+
С учетом того, что исходный файл правил тоже хранится в репозитории (разбор выполняется только для файлов в индексе), то обратная сборка в текущий момент не целесообразна. Но ее можно сделать гарантируя соблюдение струтуры и порядка исходного файла правил. По идее для этого можно будет использовать схему, которая хранится в репозитории. Но пока сборка не планируется.

0 commit comments

Comments
 (0)