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

если на уровне домена подразумевается уникальное значение, значит логика должна быть в домене
что не так?
Человек выше выразил недоумение по поводу вопроса @fixxxer'а, если ты еще раз перечитаешь сообщения, то, наверное, будет понятен и мой комментарий.
 
А domain layer разве не является моделью предметной области выраженной в коде?
Ну да, в более широком смысле является, конечно.
Надо, наверное, уточнять, говорим о модели предметной области в целом, или о модели какой-либо сущности.
 
Господа, так и как делать валидацию уникальности??
Допустим, у нас модель Country, у нее isoCode(unique). Модель не должна создаваться невалидной, т.е. уникальность должна проверяться в модели? или где?
Если в модели, то как? откуда у модели доступ к репозиторию?
Если НЕ в модели, тогда ничто не мешает создать невалидную модель.
Помогите разобраться, плиз)
 
Господа, так и как делать валидацию уникальности??
Допустим, у нас модель Country, у нее isoCode(unique). Модель не должна создаваться невалидной, т.е. уникальность должна проверяться в модели? или где?
Если в модели, то как? откуда у модели доступ к репозиторию?
Если НЕ в модели, тогда ничто не мешает создать невалидную модель.
Помогите разобраться, плиз)
Модель не становится невалидной, если isoCode неуникален.
При вставке в save() репозитория можно выкидывать IsoCodeIsNotUnique exception. Определить это можно по коду ошибки от MySQL или по affected rows.
Также опционально можно ещё до выполнения команды делать проверку уникальности.
 
Выше же предлагали вариант, как-то так:
PHP:
interface CountryRepository
{
    /**
     * @param Country $entity
     * @return void
     * @throws CountryWithCodeAlreadyExistsException
     */
    public function save(Country $entity);
}
 
Модель не становится невалидной, если 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'ах
 
Сверху