Я собираюсь потихоньку рассказывать о своей идеологии и привлекать больше людей к этому проекту, так что, буду рассказывать об интересных решениях, которые были применены в этом проекте.

Ну и по случаю появления драйвера для sqlalchemy, на этот раз речь пойдёт про драйвера, а если вы пропустили вступительную статью, советую прочитать сначала её для понимания.

Что мы имеем сейчас

Из-за того, что идеология jija предполагает модульность, тут просто не могла не появиться идея ввести драйвера для взаимодействия между модулями и ядром фреймворка.

Каждый драйвер в jija - класс, который наследуется от интерфейса и описывает методы для взаимодействия с логикой, которую должен выполнять модуль предоставляющий этот драйвер.

class DatabaseDriver(base.Driver):
    async def get_connection(self):
        raise NotImplementedError()

    async def migrate(self):
        raise NotImplementedError()

    async def update(self):
        raise NotImplementedError()

Так же драйвер может вставлять какие-либо свои компоненты в приложение и запускать свои задаче на старте приложения

class Driver:
    def setup(self, aiohttp_app: web.Application):
        return aiohttp_app

    async def preflight(self):
        pass

Таким образом мы можем написать драйвер для любой ORM, настроить в нём сборку, подключение к базе и

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

Да, единственный драйвер, который хоть как-то сейчас соответствует своему названию - драйвер базы и всё что у него есть для взаимодействия с дугими модулями - get_connection, но это только начало.

Светлое будущее

По мере разработки планирую добавлять больше возможностей для взаимодействия компонентов между собой, в планах сделать:

  • Баффнуть драйвер базы: добавить методы взаимодействия с базой, после чего любая сторонняя библиотека добавленная в наш проект сможет взаимодействовать с базой, даже не зная, с чем она вообще взаимодействует: с реальной базой или с профессиональной базой поднятой в exel и получать корректные данные для своей работы.

  • Переработать авторизацию, после чего она тоже переедет в драйвер, благодаря чему можно будет получать информацию об авторизации, авторизовывать и регистрировать пользователя через драйвер.

Ну и пара фич, о реализации которых я ещё только думаю:

  • Возможность выбора модуля вьюх и драйвер на них

  • Возможность выбора модуля сериализатора и драйвер на них

Как итог

В перспективе, можно будет иметь много разных библиотек от разных авторов, которые даже не знают о существовании друг друга, но могут спокойно друг с другом взаимодействовать.

Да и в целом драйверная архитектура даёт возможность проекту быть модульным, что в свою очередь позволяет подстраиваться под любые задачи и использовать jija под любые проекты.

Полезные ссылки

Комментарии (1)


  1. ivankudryavtsev
    23.04.2023 18:00
    +3

    Утопично, но успехов.