Объект значения дизайна, управляемый доменом, как обеспечить уникальное значение

Я создаю генератор анкет. Анкета состоит из разделов, разделы состоят из страниц, а страницы состоят из вопросов. Анкета является сводным корнем.

Разделы, страницы и вопросы могут иметь так называемые короткие коды, которые должны быть уникальными в рамках анкеты (но не уникальными в базе данных, поэтому они не являются строго идентичностью). Я намеревался сделать шорткод ценным объектом и хотел включить бизнес-правило, согласно которому он должен быть уникальным в пределах анкеты, но я не уверен, как это обеспечить. Насколько я понимаю, объект значения не должен обращаться к репозиторию или сервисному слою, так как же он узнает, уникален ли он?

Спасибо за любую помощь.

Даррен


person Darren    schedule 01.06.2010    source источник
comment
Созданы ли ваши шорткоды или они введены системой? Это изменит ответ. т. е. если я введу новый шорткод, которого нигде нет, будет ли он вставлен? Однако, как правило, вводите данные через сервисный уровень. Служба может сделать вызов для построения агрегата и проверки его уникальности. Если он уникален, разрешите вставку/обновление. Если это не так, не позволяйте этому случиться. Домен многоуровневый, в нем объекты домена, а также сервисы, которые их вызывают. Ваша бизнес-логика будет находиться в разных местах в зависимости от объема ваших действий.   -  person Joseph Ferris    schedule 01.06.2010


Ответы (3)


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

person Szymon Pobiega    schedule 02.06.2010

Очевидно, вам понадобится поле PK в базе данных. Как вы это реализуете, зависит от вас, но на моем месте я бы перенес поле PK в ваш объект значения, чтобы оно обрабатывалось автоматически.

person Robert Harvey    schedule 01.06.2010

Вы можете использовать что-то вроде Guid или UUID. Однако то, как именно вы его сгенерируете, будет зависеть от того, какой язык вы используете для своего приложения.

person Eric Petroelje    schedule 01.06.2010