Всем привет, изучаю DDD, ситуация следующая: В слое домена имеется сущность

User, как можно абстрагироваться от интерфейсов Symfony?

Будет ли правильным решением поменять User на AbstractUser и рядом поместить например SymfonyUser, который уже будет реализовывать интерфейсы Symfony?

class User implements UserInterface, PasswordAuthenticatedUserInterface
{
public function __construct(
private ?Id $id,
private Status $status,
private Email $email,
private bool $isEmailVerified,
private Role $role,
private HashedPassword $hashedPassword,
private DateTimeImmutable $createdAt,
private ?DateTimeImmutable $updatedAt = null,
private ?DateTimeImmutable $activityAt = null,
) {
}
}

3 ответов

16 просмотров

Привет! Если вы хотите абстрагироваться от интерфейсов Symfony в слое домена, вы можете использовать принцип инверсии зависимостей (Dependency Inversion Principle, DIP) и применить подход "чистой архитектуры" (Clean Architecture) или "архитектуры на основе гексагона" (Hexagonal Architecture). Вариант с созданием абстрактного класса AbstractUser и класса SymfonyUser, реализующего интерфейсы Symfony, может быть одним из способов реализации такой абстракции. Однако, если ваша сущность User не имеет прямой зависимости от фреймворка Symfony и интерфейсов Symfony, то добавление абстрактного класса может быть излишним. Вместо этого вы можете просто использовать класс User без изменений и сохранить его независимым от фреймворка Symfony. Если вам понадобится использовать объекты User в контексте Symfony, вы можете создать отдельные классы-адаптеры или слои инфраструктуры, которые будут работать с объектами User и взаимодействовать с фреймворком Symfony через интерфейсы. Например, в вашем случае, вы можете создать класс SymfonyUserAdapter, который реализует интерфейсы Symfony и внутри себя содержит экземпляр класса User. Это позволит вам использовать объекты User в контексте Symfony, но при этом сохранит сущность User независимой от фреймворка. php class SymfonyUserAdapter implements UserInterface, PasswordAuthenticatedUserInterface { private User $user; public function __construct(User $user) { $this->user = $user; } // Реализация методов интерфейсов Symfony, делегирующих вызовы объекту User public function getUsername(): string { return $this->user->getEmail(); // Например, использование email вместо username } // Реализация остальных методов интерфейсов Symfony } Таким образом, класс SymfonyUserAdapter адаптирует объект User для использования в контексте Symfony, не требуя изменений в самом классе User и не делая его зависимым от Symfony.

Симфони не реализует интерфейсы в сущеностях доктрины

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта