String вместо guid для идентификации корня агрегации в архитектурном подходе cqrs, стоит ли?

Рейтинг: 2Ответов: 1Опубликовано: 23.01.2015

Во всех примерах в Интернете для идентификации корня агрегации используется guid.

Совмещая rest api с cqrs, кажется не совсем информативно делать идентификатор ресурса вида:

api/entities/6F9619FF-8B86-D011-B42D-00CF4FC964FF

Совсем другое дело, если хотя бы:

api/entities/name

Интересует, какие возможны подводные камни при использовании строкового идентификатора, естественно, предполагается, что строка будет уникальной.

С другой стороны, возможно, на стороне домена оставить и guid как идентификатор, а в модели чтения использовать строковый, но тогда как же быть с отправкой команд доменной модели, с таким подходом придётся сначала в модели чтения найти идентификатор доменной модели и только потом отправлять команду в домен.

Ответы

▲ 2Принят

Лучше использовать guid, а в путях если очень хочется, алиасы и отправлять команду в два этапа: поиск id по алиасу в индексе и после формирование команды (естественно на стороне api). Guid позволит хранить стабильный идентификатор, а алиас красивый и самое главное безболезненно изменяемый путь.