Учебный backend социальной сети, построенный на ASP.NET Core с акцентом на архитектуру, разделение ответственности и расширяемость системы.
Проект организован по принципам Clean Architecture и разделён на независимые слои.
Core
├── Domain
└── Application
Infrastructure
├── DI
├── PostgreSql
├── JwtToken
├── LoginNotification
└── Redis
└── Messaging.Kafka
Web
└── Api
Содержит основные сущности приложения, бизнес-правила и контракты, необходимые для работы предметной области.
Содержит прикладную логику:
- обработчики команд и запросов;
- DTO;
- абстракции сервисов;
- обработчики доменных событий.
Реализации внешних зависимостей:
- PostgreSQL через Entity Framework Core;
- JWT-аутентификация;
- Redis;
- SignalR-интеграции;
- асинхронный обмен сообщениями через Apache Kafka;
- регистрация зависимостей.
Точка входа приложения:
- REST API;
- SignalR Hub.
Зависимости направлены внутрь приложения.
- Доменные модели не зависят от инфраструктурных реализаций.
Все внешние зависимости подключаются через интерфейсы и внедрение зависимостей.
При проектировании проекта используются принципы SOLID для уменьшения связанности компонентов и повышения расширяемости системы.
Для обработки побочных действий используются доменные события.
После выполнения бизнес-операций создаются события, которые обрабатываются через dispatcher и зарегистрированные обработчики.
Это позволяет отделять основную бизнес-логику от уведомлений, интеграций и других вторичных процессов.
Доменные события публикуются в Kafka и обрабатываются асинхронно фоновыми консьюмерами.
Доступ к данным организован через репозитории и Unit of Work.
Это позволяет изолировать бизнес-логику от конкретной реализации хранения данных и выполнять связанные операции в рамках одной транзакции.
- JWT Access Token;
- JWT Refresh Token;
- защита API-эндпоинтов.
- создание постов;
- сохранение в PostgreSQL;
- публикация доменных событий в Kafka после создания.
Уведомления реализованы через SignalR.
Поддерживается доставка событий пользователям в режиме реального времени. Обработка событий создания уведомлений выполняется асинхронно через Kafka-консьюмер.
Реализована система диалогов между пользователями:
- создание диалогов;
- отправка сообщений;
- получение сообщений в реальном времени через SignalR.
Для рейтинга пользователей используется Redis.
Применяются:
- Sorted Sets для хранения рейтинга;
- Hashes для хранения дополнительной информации о пользователях.
Рейтинг формируется на основе количества созданных постов. Обновление рейтинга выполняется асинхронно через Kafka-консьюмер.
- ASP.NET Core
- Entity Framework Core
- PostgreSQL
- SignalR
- Redis
- Apache Kafka (Confluent.Kafka)
- JWT Authentication
- Dependency Injection
Проект создавался для практики современных подходов к построению backend-приложений:
- проектирование многослойной архитектуры;
- работа с real-time коммуникацией через SignalR;
- использование Redis для высокопроизводительных сценариев;
- применение событийной модели внутри приложения;
- внедрение Event-Driven Architecture с брокером сообщений Kafka;
- реализация асинхронной обработки событий с гарантией доставки;
- построение расширяемой и поддерживаемой кодовой базы.