Создать бизнес-ключ - PullRequest
2 голосов
/ 15 мая 2009

Каков наилучший способ создания уникального номера для бизнес-ключа?

В приведенном ниже примере наш клиент хочет получить номер (OrderNumber), который он может использовать для ссылки на заказ.

<class name="Order">
  <id name="Id" ... />

  <property name="OrderNumber" column="order_number" />

</class>

1 Ответ

6 голосов
/ 16 мая 2009

Я обнаружил, что лучший способ выполнить эти задачи - записать их в коде, а не просочиться в слой данных. Я не позволяю NHibernate рассчитать это. Я рассматриваю эту концепцию как полноценную функцию приложения. Это хорошо, потому что я могу написать тесты для этого и иметь гибкость. Иногда существуют другие факторы, связанные с вычислением следующего порядкового номера, например, отношение к другому объекту. Возможно, вам нужны последовательные номера заказов в пределах области клиента: 02-001, 02-002 для клиента 02 и 01-001, 01-002 для клиента 01.

Итак, я продвигаю концепцию SequneceNumber для объекта модели предметной области, сопоставляю его с NHibernate и выполняю логику на моей стороне. Всякий раз, когда мне нужен новый, я использую интерфейс, который выглядит примерно так:

public interface ISequenceRepository
{
    string GetNextSequenceNumber(Customer customer);
}

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...