Мне кажется, что это нарушает базовый подход DDD, потому что мои доменные сущности никогда не должны полагаться на то, что находится за пределами домена (в этом случае UserInterface является компонентом Symfony).
Теоретически вы правы.Ваши агрегаты никоим образом не должны зависеть от инфраструктуры.
Многие платформы ориентированы на обеспечение быстрой доставки программного обеспечения, а не на чистый код.Из того, что мы видели, Symfony больше подходит для CRUD-сущностей, в простых доменах, а не для сложных доменов, где DDD больше подходит.Это означает, что, возможно, вам не следует использовать DDD в этом домене, и, возможно, будет достаточно сущности CRUD.
Или, может быть, если вы думаете, что User
действительно должен быть агрегатом DDD, поскольку он имеет сложное поведение, тоВы должны извлечь UserPassword
в свою собственную сущность CRUD, которая не связана с ограничениями DDD.Затем в вашем User
Aggregate вы ссылаетесь на пароль только по идентификатору, то есть private $passwordId;
.
Нужно ли мне реализовывать свой собственный UserPasswordEncoder, который может работать непосредственно с моей сущностью пользователя домена?
Я думаю, это будет то же самое, что и компонент инфраструктуры, по крайней мере, с точки зрения DDD.Хеширование паролей является компонентом инфраструктуры, независимо от того, кто его реализует.