TGStat
TGStat
Type to search
Advanced channel search
  • flag English
    Site language
    flag Russian flag English flag Uzbek
  • Sign In
  • Catalog
    Channels and groups catalog Regional compilations Thematic compilations Платные каналы Search for channels
    Add a channel/group
  • Ratings
    Rating of channels Rating of groups Posts rating
    Ratings of brands and people
  • Analytics
  • Search by posts
  • Telegram monitoring
  • Promotion
    Advertising through Yandex Business Advertising in channels through TGStat Agency Advertising on TGStat.ru website
.NET sh blog

28 Feb 2024, 19:17

Open in Telegram Share Report

Сборка Infrastructure

Эта сборка является частью слоя "Frameworks" из чистой архитектуры Роберта Мартина.
Основное назначение - реализовать абстракции объявленные в слое Application.

Примеры таких абстракций:
* Работа с базой данных
* HTTP клиенты
* Отправка уведомлений на почту/мессенджеры
* Работа с файлами (S3)
* Реализация сборщика метрик используя к примеру OpenTelemetry
* Все в таком духе.

Почему эта сборка нужна? Можно ведь все абстракции реализовать в том же Api?
В теории можно, но на практике появляется необходимость сделать альтернативный интерфейс к микросервису. И помимо классического HTTP API может появиться GRPC API, BackgroundJobs и др. И им всем эти реализации абстракций будут нужны и придется потом их уносить в отдельную сборку - Infrastructure.

Здесь может появиться еще один вопрос - а почему Producer реализуется на уровне BackgroundJobs, а не в Infrastructure? Ведь в GRPC/API они тоже могут понадобиться.

Тут все зависит от того как вы публикуете в шину. Я для этого использую Transactional Outbox.
Поэтому всё что мне нужно сделать - это добавить запись об отправляемом сообщении в базу данных в одной транзакции с изменениями доменных сущностей. Доступ к таблице Outbox в слое Infrastructure имеется, поэтому сложностей обычно не возникает.

Фоновые воркеры, которые сканируют таблицу с outbox messages и доставляют сообщения в шину располагаются в BackgroundJobs или API/GRPC, если Вы не отделяли от них BackgroundJobs.
Поэтому прямого доступа к Producer в целом и не требуется из сборки Infrastructure.

Если же у вас появится соблазн перенести Consumer/Producer и их DTO модели в Infrastructure, будьте с этим аккуратны, так как они становятся доступны во всех сборках выше (API, GRPC, BackgroundJobs etc) и необходимо их тщательно изолировать от некорректного использования и распространения.

Следующим рассмотрим слой Application

69 0 0 5
Catalog
Channels and groups catalog Channels compilations Search for channels Add a channel/group
Ratings
Rating of Telegram channels Rating of Telegram groups Posts rating Ratings of brands and people
API
API statistics Search API of posts API Callback
Our channels
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Read
Академия TGStat Telegram Research 2019 Telegram Research 2021 Telegram Research 2023
Contacts
Справочный центр Support Email Jobs
Miscellaneous
Terms and conditions Privacy policy Public offer
Our bots
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot