Валидация уникальности значения

Вурдалак

Продвинутый новичок
если на уровне домена подразумевается уникальное значение, значит логика должна быть в домене
что не так?
Человек выше выразил недоумение по поводу вопроса @fixxxer'а, если ты еще раз перечитаешь сообщения, то, наверное, будет понятен и мой комментарий.
 

fixxxer

К.О.
Партнер клуба
А domain layer разве не является моделью предметной области выраженной в коде?
Ну да, в более широком смысле является, конечно.
Надо, наверное, уточнять, говорим о модели предметной области в целом, или о модели какой-либо сущности.
 

camohob

Новичок
Господа, так и как делать валидацию уникальности??
Допустим, у нас модель Country, у нее isoCode(unique). Модель не должна создаваться невалидной, т.е. уникальность должна проверяться в модели? или где?
Если в модели, то как? откуда у модели доступ к репозиторию?
Если НЕ в модели, тогда ничто не мешает создать невалидную модель.
Помогите разобраться, плиз)
 

Вурдалак

Продвинутый новичок
Господа, так и как делать валидацию уникальности??
Допустим, у нас модель Country, у нее isoCode(unique). Модель не должна создаваться невалидной, т.е. уникальность должна проверяться в модели? или где?
Если в модели, то как? откуда у модели доступ к репозиторию?
Если НЕ в модели, тогда ничто не мешает создать невалидную модель.
Помогите разобраться, плиз)
Модель не становится невалидной, если isoCode неуникален.
При вставке в save() репозитория можно выкидывать IsoCodeIsNotUnique exception. Определить это можно по коду ошибки от MySQL или по affected rows.
Также опционально можно ещё до выполнения команды делать проверку уникальности.
 

Sufir

Я не волшебник, я только учусь
Выше же предлагали вариант, как-то так:
PHP:
interface CountryRepository
{
    /**
     * @param Country $entity
     * @return void
     * @throws CountryWithCodeAlreadyExistsException
     */
    public function save(Country $entity);
}
 

camohob

Новичок
Модель не становится невалидной, если isoCode неуникален.
При вставке в save() репозитория можно выкидывать IsoCodeIsNotUnique exception. Определить это можно по коду ошибки от MySQL или по affected rows.
Также опционально можно ещё до выполнения команды делать проверку уникальности.
Выше же предлагали вариант, как-то так:
PHP:
interface CountryRepository
{
    /**
     * @param Country $entity
     * @return void
     * @throws CountryWithCodeAlreadyExistsException
     */
    public function save(Country $entity);
}
Спасибо, кажется, понял в чем проблема)
Мы сделали CQS и над обработчиками команд обертка в виде транзакции(всё это запускает командная шина), в транзакцию засунули flush(доктрину юзаем). Таким образом, у нас в репозиториях нет нужды в методе save(), есть только add() и remove() - поэтому то и негде проверять уникальность при update'ах
 
Сверху