Как создать ключ Natural для объекта Domain?

Недавно я читал этот вопрос: Свойства идентификатора объектов домена в DDD

В этом вопросе говорится о наличии суррогатного ключа в инфраструктурном слое, который является идентификатором базы данных. Я использую Guid для этого:

Guid id = Guid.NewId();

Затем в ответах говорится о наличии естественного ключа на уровне домена, который идентифицирует объекты. Отличным примером этого является мой банковский счет, то есть Guid идентифицирует банковский счет в базе данных (и модели данных), а номер счета и код сортировки идентифицируют банковский счет на уровне домена, то есть в базе данных нет идентификатора базы данных доменного уровня.

Скажем, у меня есть объект продукта, и я хочу сгенерировать код продукта на уровне домена. Как мне это сделать? Вопрос, который я связал с разговорами об использовании алгоритмов. Какие алгоритмы существуют?

3 голоса | спросил w0051977 8 FebruaryEurope/MoscowbThu, 08 Feb 2018 12:20:11 +0300000000pmThu, 08 Feb 2018 12:20:11 +030018 2018, 12:20:11

1 ответ


3

Давайте придерживаемся вашего примера:

  

Скажем, у меня есть объект продукта, и я хочу сгенерировать код продукта на уровне домена. Как мне это сделать?

Во-первых, вы спросите своих экспертов домена о своих требованиях для кода продукта. Они могут придумать такие вещи, как

  • должна быть напечатана на бумаге, используя только цифры или используя альфа-числовые символы, но не используя вместе числа и буквы, которые можно легко перемешать (например, 0 и O, 1 и l)

  • должен быть «дружественным» штрих-кодом

  • должен быть уникальным для каждого продукта, который, как ожидается, будет выпущен в течение следующих 10 лет нашей компанией

  • должен кодировать категорию продукта в некоторой части номера

  • должен кодировать год производства

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

  • должен предотвращать дублирование, даже если ваша система работает автономно в распределенной форме

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

Или, если вам повезет, эксперты вашего домена расскажут вам

  • нам не нужно что-то вроде кода продукта для нашего бизнеса, у нас его никогда не было, никогда его не пропустили.

В этом случае не изобретайте «естественный ключ». Вместо этого используйте суррогатный ключ исключительно в том случае, если вам нужно реализовать моделированные отношения.

ответил Doc Brown 8 FebruaryEurope/MoscowbThu, 08 Feb 2018 13:53:47 +0300000000pmThu, 08 Feb 2018 13:53:47 +030018 2018, 13:53:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132