Для большинства приложений CRUD я использую генератор guid.comb
ID от NHibernate. Преимущество этого заключается в том, что у меня есть доступ к идентификатору до того, как я сброслю его в базу данных, и это позволяет обойти проблему фрагментации индекса, связанную с использованием обычных Guids.
Когда мы вводим обмен сообщениями, возникает несколько вопросов:
- Поскольку мы отправляем команды для внесения изменений в наш уровень домена, у нас фактически нет доступа к «новому» объекту домена в пользовательском интерфейсе. Часто (в случае веб-приложения) нам нужен его идентификатор для перенаправления на другую страницу. Одним из решений было бы передать идентификатор как часть команды (например, Guid.NewGuid()), но тогда мы потеряем последовательные идентификаторы, которые предоставляет NHibernate.
- Если вместо этого мы используем стратегию идентификации, мы устраняем проблему с индексом, но теперь у нас нет простого способа определить идентификатор из пользовательского интерфейса, кроме подписки на событие или синхронного выполнения команды, что не идеально в веб-приложении.
Поэтому мне любопытно, какую стратегию используют другие разработчики NServiceBus. Выполнение какой-либо операции с существующим объектом на самом деле не является проблемой, поскольку мы можем просто отправить запрос с помощью ajax для отправки команды и уведомить пользователя о том, что все было успешно (вероятно). Поскольку страница, на которой они находятся, уже содержит обновленную информацию, этого достаточно.
Однако, когда мы создаем новый экземпляр объекта домена (с помощью команды), нам часто нужно перенаправить пользователя на страницу, которая затем извлекает вновь созданный объект из нашей базы данных. Конечно, этот объект может быть еще не сохранен (поскольку мы обрабатываем наши команды асинхронно), и нам обычно нужен идентификатор для выполнения этого перенаправления.