Уникальность скажем кода.
Обеспечение уникальности является конкретным примером проверки правильности набора . Проблема с проверкой набора состоит в том, что, по сути, вы выполняете проверку, блокируя весь набор. Если весь набор включен в один «агрегат», это легко сделать. Но если набор охватывает агрегаты, то это беспорядок.
Распространенным решением для уникальности является управление ею на уровне базы данных; СУБД действительно хороши в операциях над множествами и эффективно сериализуются. К сожалению, это блокирует вас в решении для базы данных с хорошей поддержкой наборов - вы не можете легко переключиться на базу данных документов или хранилище событий.
Другой подход, который иногда уместен, состоит в том, чтобы иметь единственную совокупную проверку на уникальность для кэшированной копии доступных кодов. Это дает вам больше свободы выбора решения для хранения данных, но также открывает возможность того, что в гонке данных появится дублирование, которого вы пытаетесь избежать.
В некоторых случаях вы можете закодировать уникальность кода в идентификатор агрегата. По сути, каждый идентификатор становится набором из одного.
Имейте в виду вопрос Грега Янга
Какое влияние оказывает сбой на бизнес?
Знание того, насколько дорогой сбой, говорит вам о том, сколько вам разрешено тратить на решение проблемы.
Правильность / проверка идентификатора вечного агрегата.
Обычно он состоит из двух частей. Проще всего проверить данные по некоторой согласованной схеме. Если мы согласны с тем, что идентификатор будет URI , тогда я могу подтвердить, что полученные данные удовлетворяют этому ограничению. Аналогично, если предполагается, что идентификатор является строковым представлением UUID, я могу проверить, что полученные данные соответствуют правилам проверки, описанным в RFC 4122 .
Но если вам нужно проверить, что идентификатор используется где-то еще? Тогда вам нужно будет спросить .... Главный вопрос в этом случае заключается в том, нужен ли вам ответ на этот вопрос немедленно или вам удастся проверить его асинхронно (например, моделируя «непроверенные идентификаторы» и « проверенные идентификаторы "отдельно).
И, конечно, вы снова можете примирить все расы, присущие распределенным вычислениям.
Магии нет.