/rilata-core

Фреймворк для объединения всех участников проекта

Primary LanguageTypeScript

Краткое описание: Фреймворк, который хочет предоставить вам всю необходимую базу, чтобы вы могли создавать сложные приложения.

Цели фреймворка:

  1. Создать единую платформу для всей команды разработки.
    • По возможности все артефакты должны храниться в кодовой базе (например файлы user story);
  2. Предоставить для "программистов" функционал для комфортной разработки "очень" больших приложений;
  3. Автоматически генерировать всю необходимую документацию чтобы видеть полную картину того "Как устроена доменная область":
    • Чтобы видеть взаимосвязи модулей, какой модуль от какого зависит;
    • Чтобы видеть взаимосвязи use-case, какой use-case от какого зависит;
    • Чтобы видеть как и чем общаются различные части приложения;

Основные плюсы:

  1. Предоставляет возможности выстраивания модульной архитектуры приложения;
  2. Предоставляет возможности выстраивания "Чистой" или "DDD" архитектуры. Т.е. полное выделение доменного слоя;
  3. Предоставляет функционал для комфортного и простого взаимодействия фронтэнда и бэкенда:
    1. единый стек основанный на языке программирования typescript;
    2. явно описанные контракты между фронтэндом и бэкендом;
    3. полная инкапсуляция технического http слоя, не надо заморачиваться явным описанием и реализацие url каждого эндпойнта (use-case);
  4. Практически никаких зависимостей, все "написано" с нуля;
  5. Фреймворк уже принял большинство решений по архитектура, чтобы вы максимально концентрировались над решением задач вашего приложения;
  6. В будущем будет развиваться функционал для автоматической генерации документации "доменной области";

Основные минусы:

  1. Сложная кривая входа:
    1. некоторые решения могут быть сложными для понимания "как это работает", например реализация "Внедрения зависимости" основанной на паттерне "Service locator";
    2. попытки охватить "всевозможные" варианты выстраивания архитектуры приложения (сервис-модульная, микросервисная, cqrs, event sourcing и т.д.);
  2. Сложность освоения:
    1. никому не известна, нет сообщества;
    2. нет документации (будем решать);
  3. Фреймворк дает довольно жесткий каркас того, как должно работать приложение;
  4. Возможны изменения, так как проект на стадии активной разработки;
  5. Подвержена детским болезням из-за "новизны";

[Описание фреймворка и его предназначения]

Оглавление

Установка

Для изучения фреймворка git clone https://github.com/nurgeo/rilata/

Чтобы добавить как зависимость к своему проекту bun add nurgeo/rilata

Требования:

  • bun;
  • typescript;

Зависимости:

  • email-validator;

Быстрый старт

Попробовать:

  • Склонировать репозиторий: git clone https://github.com/nurgeo/rilata/;
  • Перейти в папку с проектом: cd rilata;
  • Выполнить команду запуска: bun run ./tests/service-oriented-impl/zzz-run-server/main.ts -f;
    • опция -f: при запуске тестового сервера БД заполняется начальными записями;
  • Выполнить каким либо способом post запрос с токеном авторизации и заполненным телом, например:
curl -X POST \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1MzZlNzQ2My1iMjRkLTRlN2ItYmFkOS0yYmQyZWQ4MDExZmQiLCJleHAiOjI1MjY4NTIzNTUzMDIsInR5cCI6ImFjY2VzcyJ9.Fj0xoztJyN52K9prR8w1Jo0B_7rImJ6e2RsCnAARfR8" \
  -H "Content-Type: application/json" \
  -d '{ "meta": { "name": "getPersonByIin", "requestId": "dea2d31a-1179-4a68-a139-f3b6c8dd5aa0", "domainType": "request" }, "attrs": { "iin": "123123123123" } }' \
  localhost:3000/api/subject-module/

Должны получить ответ:

{
  "httpStatus": 200,
  "success": true,
  "payload": {
    "id": "b433034e-8090-4c7d-8738-8cb78bbc6792",
    "firstName": "Bill",
    "lastName": "Geits",
    "iin": "123123123123",
    "contacts": { "emails": [
        { "type": "corporate", "email": "bill@microsoft.com" }
    ]}
  }
}

Примеры для изучений:

  1. По пути ./tests/service-oriented-impl/ есть пример реализации монолитного модульного сервис ориентированного приложения.
  2. По пути ./tests/bus-run-impl/ есть пример реализации приложения где модули "общаются" через шину (посредством подписки на события).

Документация

В будущем...

Лицензия

MIT License

Дорожная карта

  • Добавить модули для работы с чат-ботами.
  • Добавить функционал для генерации документации доменной области.