|
| 1 | +# Пример структуры репозитория для описания архитектуры |
| 2 | + |
| 3 | +**Цель примера:** Снизить порог вхождения в DocHub за счет внедрения типовых шаблонов структуры репозитория и меню DocHub для управления корпоративной архитектурой. |
| 4 | + |
| 5 | +# Суть примера |
| 6 | +Существует множество различных подходов к описанию архитектуры компании. В нашей компании была выбрана методология TOGAF. При этом мы не пытаемся внедрить классическую методологию TOGAF, мы используем комбинированный подход, выбирая только те инструменты, которые закрывают наиболее критичные риски компании. |
| 7 | + |
| 8 | +Согласно методологии TOGAF архитектура предприятия делится на 4 домена: |
| 9 | + |
| 10 | +1. Бизнес-архитектура - описание бизнес-процессов компании |
| 11 | +2. Информационная архитектура - описание архитектуры данных |
| 12 | +3. Прикладная архитектура - описание архитектуры программных продуктов (системы, сервисы, приложения и т.д.) |
| 13 | +4. Технологическая архитектура - описание архитектуры инфраструктуры |
| 14 | + |
| 15 | + |
| 16 | + |
| 17 | +Вся структура примера разработана под выбранную методологию с учетом нашего видения. В общем случае в данном репозитории мы ведем прикладную архитектур ровня ПА-L1, но если у системы нет своего репозитория, либо у архитектора несколько систем, то он может управлять в этом репозитории и уровнем ПА-L2. |
| 18 | + |
| 19 | +## Файловая структура примера |
| 20 | +* **application_arch** - в этой папке хранятся все данные, связанные с прикладной архитектурой, кроме контекстов. Контексты мы вынесли в отдельную папку artefacts. Детально про artefacts можно почитать ниже. |
| 21 | + * **systems** - в этой папке хранятся данные по системам. Каждую систему мы описываем в своём файле и имя файла всегда соответствует имени системы. Идентификатор системы в общем случае представляет из себя доменное имя в виде: `<имя компании>.<имя бизнес-юнита>.<имя системы>`. Если вдруг у системы нет своего репозитория, то в этом файле мы также описываем runtime компоненты этой системы, что позволяет хранить всю информацию по системе в одном месте. |
| 22 | +* **artefacts** - в этой папке мы храним все артефакты по системам, например контексты мы храним в такой структуре: `./artefacts/<имя бизнес-юнита>/<имя контекста>`. Также здесь мы храним различные схемы по системам. |
| 23 | +* **business_arch** - в этой папке хранятся все данные, связанные с бизнес-архитектурой. На текущий момент мы не ведем в DocHub бизнес-архитектуру. Возможно, суда будем класть архитектурные скетчи, когда Рома закончит встраивать в DocHub https://excalidraw.com/ |
| 24 | +* **dictionaries** - вспомогательная папка для хранения справочной информации. Например, при заполнении системы встал вопрос по её статусе, и чтобы не дублировать каждый раз всю информацию по статусу мы сделали справочник статусов и в системе используем только идентификатор, а если нам нужна полная информация, то получаем её при помощи функции $lookup внутри запроса. |
| 25 | +* **enterprise_arch** - это папка корпоративных архитекторов, сюда мы помещаем всю информацию, которая связана с развитием архитектуры в компании. |
| 26 | + * **adr** - в этой папке мы храним реестр архитектурных решений |
| 27 | + * **processes** - в этой папке мы храним документацию по различным архитектурным процессам |
| 28 | + * **tools** - в этой папке мы храним документацию по инструментам архитектуры |
| 29 | + * **dochub** - в этой папке мы храним документацию по DocHub |
| 30 | + * **welcome** - в этой папке мы храним документацию, которая выводится при открытии DocHub (welcome page) |
| 31 | +* **images** - картинки для настоящей документации |
| 32 | +* **information_arch** - в этой папке хранятся все данные, связанные с информационной архитектурой. На текущий момент мы в начале пути и сделали пока только прототип по управлению бизнес-сущностями на логическом уровне. |
| 33 | +* **settings** - здесь мы храним всякие настройки |
| 34 | + * **datasets** - здесь у нас общие запросы |
| 35 | + * **jsonata** - здесь у нас общие функции. Пример использования можно посмотреть [здесь](https://github.com/rpiontik/DocHubExamples/blob/main/src/jsonata_query_examples/jsonata_query_example.md). |
| 36 | + * **validators** - здесь мы описываем валидаторы, которые нужно выводить в общее меню проблем. Пример использования можно посмотреть [здесь](https://github.com/rpiontik/DocHubExamples/tree/main/src/validator_example) |
| 37 | +* **standards** - это одна из ключевых папок, где мы храним архитектурные принципы и стандарты, которые обязательны к выполнению всеми командами |
| 38 | + * **arch_principles** - здесь у нас описаны архитектурные принципы и принципы информационной безопасности |
| 39 | + * **it_platforms** - здесь мы храним архитектурные стандарты по платформам, а также принятые нотации по кодированию |
| 40 | + * **patterns** - здесь мы описываем различные паттерны, которые могут использовать наши команды. В примере есть пример реализации одного из таких паттернов. |
| 41 | +* **tech_arch** - в этой папке хранятся все данные, связанные с технологической архитектурой. Сейчас мы пока реализовали процесс управления развертыванием систем. Пример использования можно посмотреть [здесь](https://github.com/rpiontik/DocHubExamples/tree/main/src/deployment_units_management) |
| 42 | +* **_root.yaml** - корневой файл для импорта |
| 43 | +* **dochub.yaml** - корневой файл DocHub |
| 44 | +* **README.md** - текущая документация |
| 45 | + |
| 46 | +## Правила импорта yaml файлов |
| 47 | +Импорт всех файлов делается только через `_root.yaml`. Это означает что при создании любой папки всегда нужно сначала добавлять `_root.yaml`, а уже внутри подключать файлы. |
| 48 | +Такой подход позволяет очень быстро переструктурировать папки репозитория, а также избегать множественного импорта при подключении репозитория как подмодуль. |
| 49 | + |
| 50 | +## Пример целевого меню |
| 51 | +Мы не дождались пока Рома сделает кастомный вариант меню, поэтому в web версии переделали его по себя. Ниже наша версия такого меню: |
| 52 | + |
| 53 | + |
| 54 | + |
| 55 | +Найти реализованный пример на базе entity можно здесь: |
| 56 | + |
| 57 | + |
| 58 | + |
| 59 | +## Использование |
| 60 | +Скачайте себе пример и "потыкайте" каждый пункт меню, думаю найдете что-нибудь интересное :-). |
0 commit comments