Очередная порция вопросов о DDD

Обсуждаем, как правильно строить приложения
Ответить
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Очередная порция вопросов о DDD

Сообщение BrusSENS »

Доброго времени!
Не ожидал, что сама парадигма DDD так меня притянет, но уж так произошло.
Читая различные материалы возникли некоторые вопросы о правильности понимания.
1. Вроде как отличия Entity от Agregate понятны, но хочется понять, что понял это верно.
Например имеем сущность Product. У Product'а есть набор свойст и их значений (EAV). Получается у нас Product уже не сущность, а агрегат?
2. Свойства Product'а будут являться отдельными сущностями, или просто VO?
3. Имеея репозиторий MySQLProductRepository мы можем проводить запросы на вставку сразу в несколько таблиц, в случае использования свойств Product'а (EAV)? Или нужно обязательно городить адаптеры для разных репозиториев?
4. Насколько оправдано использовать UUID непосредственно для уникализации? А для выборок использовать обычный AI PK id?
5. Criteria собирать непосредственно в виде методов репозитория а ля active() или лучше передавать непосредственно из сервиса отдельным объектом?
6. При работе с Yii, получается мы реализовываем UserSevice реализующий IdentityInterface?
7. Можно ли использовать магию в агрегатах и сущностях?
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Очередная порция вопросов о DDD

Сообщение ElisDN »

1. Да. Если есть вложенные объекты, то это агрегат.

2. Внутренности обычно делают как VO.

3. Да. Репозиторий обслуживает весь агрегат. И не важно, сколько там таблиц.

4. Можно обойтись UUID4 + timestamp вместо AI.

5. Удобнее отдельными методами getByName, geyByEmail и т.д. А для значений из формы поиска сделать DTO.

6. Да, объект Identity, дёргающий репозиторий.

7. Магия не очень удобна. Лучше явно без неё.
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Очередная порция вопросов о DDD

Сообщение BrusSENS »

ElisDN писал(а): 2017.07.22, 08:40 1. Да. Если есть вложенные объекты, то это агрегат.

2. Внутренности обычно делают как VO.

3. Да. Репозиторий обслуживает весь агрегат. И не важно, сколько там таблиц.

6. Да, объект Identity, дёргающий репозиторий.
Спасибо, Дмитрий.
ElisDN писал(а): 2017.07.22, 08:40 4. Можно обойтись UUID4 + timestamp вместо AI.
Но ведь всё равно будет проигрыш в скорости?
ElisDN писал(а): 2017.07.22, 08:40 5. Удобнее отдельными методами getByName, geyByEmail и т.д. А для значений из формы поиска сделать DTO.
Тут немного не "по человечьи" выразился. Я имел ввиду scopes :D Просто вопросы писал до кофе :D
ElisDN писал(а): 2017.07.22, 08:40 7. Магия не очень удобна. Лучше явно без неё.
Ну это понятно. Но вот как реализовать тогда геттеры и сеттеры для атрибутов EAV? Кроме магии ничего на ум не приходит, к сожалению...
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Очередная порция вопросов о DDD

Сообщение ElisDN »

BrusSENS писал(а): 2017.07.22, 09:55 Ну это понятно. Но вот как реализовать тогда геттеры и сеттеры для атрибутов EAV? Кроме магии ничего на ум не приходит, к сожалению...
Просто методами $product->setValue($attrId, $value) и $product->getValue($attrId).
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Очередная порция вопросов о DDD

Сообщение BrusSENS »

ElisDN писал(а): 2017.07.22, 10:08 Просто методами $product->setValue($attrId, $value) и $product->getValue($attrId).
Получается в агрегате лучше не реализовывать обращение, как к реальным свойствам через __set() и __get()? Через $product->setValue($attrId, $value) и $product->getValue($attrId) ведь не получиться использовать ArrayAccess, что усложняет код. Или я что то не так понимаю?
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Очередная порция вопросов о DDD

Сообщение ElisDN »

BrusSENS писал(а): 2017.07.23, 01:32 ведь не получиться использовать ArrayAccess, что усложняет код.
Неужели явный вызов $product->get('color') выглядит сложнее, чем магический $product->color?
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Очередная порция вопросов о DDD

Сообщение BrusSENS »

ElisDN писал(а): 2017.07.23, 08:55 Неужели явный вызов $product->get('color') выглядит сложнее, чем магический $product->color?
Уже более глубоко полез и разобрался почему лучше без магии) Спасибо за ответ)
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Ответить