Skip to content

Latest commit

 

History

History
113 lines (85 loc) · 4.7 KB

File metadata and controls

113 lines (85 loc) · 4.7 KB

Архитектура приложения Vibik

Обзор

Приложение построено по принципам Domain-Driven Design (DDD) с четким разделением на слои.

Структура слоев

1. Domain Layer (Core)

Содержит бизнес-логику и доменные модели.

Агрегаты

  • Session - основной агрегат для управления сессией пользователя
    • Содержит пользователя и конфигурацию карты
    • Управляет жизненным циклом сессии

Value Objects

  • UserSession - данные сессии пользователя
  • MapConfiguration - конфигурация карты
  • UserConfiguration - конфигурация пользователя

Сущности

  • User - пользователь системы
  • TaskItem - задача пользователя

2. Application Layer

Содержит интерфейсы и сервисы приложения.

Интерфейсы

  • ISessionService - основной сервис для работы с сессиями
  • IUserValidationService - сервис валидации пользователей
  • IMapInitializationService - сервис инициализации карты
  • IUserRepository - репозиторий пользователей
  • IConfigurationService - сервис конфигурации

Сервисы

  • SessionService - оркестрирует инициализацию сессии
  • UserValidationService - проверяет пользователей
  • MapInitializationService - инициализирует карту

3. Infrastructure Layer

Содержит реализации для работы с внешними системами.

Репозитории

  • UserRepository - работа с пользователями через HTTP API

Сервисы

  • ConfigurationService - работа с локальной конфигурацией

4. Presentation Layer (Vibik)

Содержит UI и точку входа приложения.

Компоненты

  • App.xaml.cs - главный класс приложения
  • SessionInitializer - инициализатор сессии
  • MauiProgram.cs - конфигурация DI

Поток инициализации сессии

  1. App.xaml.cs вызывает InitializeSessionAsync()
  2. SessionInitializer получает ISessionService
  3. SessionService координирует:
    • Получение конфигурации пользователя
    • Валидацию пользователя
    • Инициализацию карты
    • Создание сессии

Dependency Injection

Все сервисы зарегистрированы в MauiProgram.cs:

  • HTTP клиент для API вызовов
  • Репозитории и сервисы
  • Логирование

Использование

Инициализация сессии

// В любом месте приложения
var app = Application.Current as App;
await app.InitializeSessionAsync();

Получение инициализатора сессии

var app = Application.Current as App;
var sessionInitializer = app.GetSessionInitializer();
var session = sessionInitializer.CurrentSession;

TODO для реализации

Infrastructure Layer

  • Реализовать HTTP вызовы в UserRepository
  • Добавить сохранение конфигурации в ConfigurationService
  • Добавить работу с SecureStorage для паролей

Application Layer

  • Добавить кэширование в сервисы
  • Реализовать обработку ошибок сети
  • Добавить валидацию входных данных

Domain Layer

  • Добавить доменные события
  • Реализовать бизнес-правила
  • Добавить валидацию доменных объектов

Принципы DDD

  1. Инкапсуляция - бизнес-логика скрыта в доменных объектах
  2. Разделение ответственности - каждый слой имеет свою зону ответственности
  3. Инверсия зависимостей - зависимости направлены к абстракциям
  4. Единственная ответственность - каждый класс решает одну задачу