Немного абстрактной проблемы здесь. Я экспериментирую с шаблоном модели предметной области и запрещаю другим обсуждениям зависимости - мне нужен совет по созданию идентификатора для использования в карте идентификаторов.
В большинстве примеров для шаблона Data Mapper, который я видел (включая тот, который описан в этой книге: http://apress.com/book/view/9781590599099) - пользователь, кажется, вручную устанавливает идентичность для данного Доменного объекта с помощью установщика:
$UserMapper = new UserMapper;
//returns a fully formed user object from record sets
$User = $UserMapper->find(1);
//returns an empty object with appropriate properties for completion
$UserBlank = $UserMapper->get();
$UserBlank->setId();
$UserBlank->setOtherProperties();
Теперь я не знаю, правильно ли я читаю примеры - но в первом объекте $ User свойство $ id извлекается из хранилища данных (я предполагаю, что $ id представляет идентификатор строки). В последнем случае, однако, как вы можете установить $ id для объекта, если он еще не получил его из хранилища данных?
Проблема заключается в создании действительного «удостоверения» для объекта, чтобы его можно было поддерживать с помощью Identity Map - поэтому создание произвольного целого числа не решает его.
В настоящее время я думаю о том, чтобы назначить разные поля для идентификации (например, адрес электронной почты) и требовать их присутствия при создании пустых доменных объектов. В качестве альтернативы, требование, чтобы все объекты были полностью сформированы, и использование всех свойств в качестве их идентичности ... вряд ли эффективно.
(Или, в качестве альтернативы, сбросьте концепцию доменной модели и вернитесь к DBAL / DAO / Transaction Scripts ... что выглядит все более элегантно по сравнению с реализациями ORM, которые я видел ...)