- Component (своего рода глобальный конфигуратор для каждого компонента, а также type-hint там где он нужен).
Мне нравиться твоя идея отказаться от префиксов/постфиксов в названиях классов и интерфейсов: ...Interface, ...Enum, Abstract... etc. В данном случае я хочу сохранить абстракцию с названием Component, но ведь и enum'ы лучше/правильно называть в единственном числе. Как избежать коллизии? При этом не нарушив Dependency Inversion Principle - если я разнесу их по разным папкам, то в случае абстракции все будет ок, но Enum не абстракция, а все классы зависящие от него будут полагаться на конкретный тип. Возможно мне стоит просто смириться с тем что хоть Enum и не будет абстрактным типом, но единственно точкой нестабильности в внутри всей системы?
Такие вещи как енумы, во и энтити вполне нормально без абстракций использовать
Ок, допустим, с этим я могу однозначно согласиться на уровне infrastructure, как и DTO, но не VO (уровень домена), Но что если Enum это domain layer - также нормально использовать без абстракции? И все еще остается вопрос о том как избежать коллизии в названии абстракции типа Component и названии Enum? Возможно стоит лучше выстроить иерархию компонентов/папок внутри системы, и конфликт самостоятельно решится...
Стоит ли относиться к Enum'у как к неизменяемой абстракции или как минимум воспринимать как VO для уровня домена?
Еще немного обмозговал. Спасибо за ответ!
Хмм, так то да. Только начал их пробовать и пока-что не думал над ними как VO. Но возникает вопрос об именовании, к примеру: что если у нас есть VO - Credentials и type-hint в сущности на Credentials $credentials. Как быть в случае с Enum? Если передадим в type-hint сущности (Credential $credential) например Credential::PASSWORD, то получим только один объект (enum) внутри сущности, но ведь нам нужно два поля: email, password
Так, что пока-что я бы не стал столь уверенно говорить что Enum это ValueObject. Возможно он таковой лишь для VO с одним атрибутом, но если их нужно type-hint'ить > 1 тогда уже лучше использовать обычный объект нужного VO-типа
VO могут содержать друг друга. и ясное дело что енум - это для одного аргумента)
Ок, с этим понятно. Но как быть с Credentials и им подобным VO в реализации через Enum?
добавь или тип.... или нуллабл сделай...
Не уверен что правильно тебя понял, но на скриншоте привел, то как я вижу использование Enum в домене
Обсуждают сегодня