Перейти к содержанию

Компоненты: общее

Этот раздел описывает компонентную модель QTasks как основу всей архитектуры фреймворка. Здесь формируется общее понимание того, что такое компонент в QTasks, какие принципы лежат в основе их взаимодействия и каким образом они образуют целостную систему.

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


Что такое компонент в QTasks

Компонент в QTasks — это изолированный архитектурный элемент, реализующий строго определённую ответственность и взаимодействующий с остальной системой исключительно через контракты.

Компонент:

  • не знает о конкретных реализациях других компонентов;
  • не хранит ссылок на их внутреннее состояние;
  • не содержит бизнес-логики, выходящей за пределы своей зоны ответственности.

Такое разделение позволяет рассматривать QTasks не как единый процесс, а как систему взаимозаменяемых узлов, связанных потоками данных.


Основные и дополнительные компоненты

В архитектуре QTasks компоненты условно делятся на две группы:

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

Граница между этими группами проходит не по уровню важности, а по архитектурной необходимости: основные компоненты задают инварианты системы, дополнительные — используют эти инварианты для расширения функциональности.


Контракты и абстракции

Взаимодействие компонентов строится на контрактах, выраженных через абстрактные классы и схемы данных.

Контракт определяет:

  • какие данные принимает компонент;
  • какие данные он возвращает;
  • в каких точках допускается расширение поведения.

Реализация компонента может быть заменена целиком, если она сохраняет совместимость с контрактом. Это ключевой механизм эволюции архитектуры QTasks.


Передача данных между компонентами

Компоненты QTasks не обмениваются объектами выполнения или состоянием Python-процесса. Все данные передаются в виде схем — структурированных, сериализуемых представлений состояния задачи и контекста её обработки.

Такой подход обеспечивает:

  • прозрачность потоков данных;
  • возможность хранения и восстановления состояния;
  • независимость от среды выполнения;
  • упрощённую отладку и тестирование.

Потоки выполнения и асинхронность

Асинхронность и параллелизм в QTasks не являются глобальным свойством системы. Они локализованы внутри конкретных компонентов и управляются ими самостоятельно.

Каждый компонент:

  • сам определяет модель выполнения (sync / async);
  • сам контролирует очереди, блокировки и семафоры;
  • не навязывает свою модель другим компонентам.

Это позволяет сочетать различные модели выполнения в рамках одной системы.


Плагины и точки расширения

Компоненты предоставляют заранее определённые точки расширения, в которых может быть внедрено дополнительное поведение.

Плагины:

  • не изменяют контракты компонентов;
  • не вмешиваются в их внутреннее состояние напрямую;
  • встраиваются в существующие потоки выполнения.

Таким образом, расширяемость достигается без нарушения архитектурных инвариантов.


Изменение и замена компонентов

Архитектура QTasks допускает следующие сценарии работы с компонентами:

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

Единственное обязательное условие — соблюдение контракта, ожидаемого остальной системой.


Роль этого раздела

Раздел «Компоненты» предназначен для формирования архитектурного мышления при работе с QTasks. Он объясняет не только как устроены компоненты, но и почему архитектура выглядит именно так.

Понимание этого раздела критично при:

  • разработке собственных компонентов;
  • глубокой интеграции QTasks в инфраструктуру;
  • анализе потоков выполнения и производительности;
  • проектировании нестандартных сценариев использования.