为商家密钥生成唯一编号的最佳方法是什么?
在下面的示例中,我们的客户需要一个可以用来引用订单的编号(OrderNumber)。
<class name="Order">
<id name="Id" ... />
<property name="OrderNumber" column="order_number" />
</class>
答案 0 :(得分:6)
我发现执行这些任务的最佳方法是将它们写入代码中,而不是将它们泄漏到数据层中。我不让NHibernate计算它。我将此概念视为应用程序的完全成熟功能。这很好,因为我可以为它编写测试并具有灵活性。有时在计算下一个序列号时还涉及其他因素,例如与另一个实体的关系。也许您想要客户领域内的顺序订单号:客户02的02-001,02-002和客户01的01-001,01-002。
因此,我将SequneceNumber的概念提升为域模型对象,使用NHibernate进行映射并在我身边执行逻辑。每当我需要一个新的,我使用一个类似于
的界面public interface ISequenceRepository
{
string GetNextSequenceNumber(Customer customer);
}
它管理数据库表中一个记录(每个客户)的当前序列号。每当我调用此函数时,它会增加数据库中的占位符并返回值。
工厂依赖于此接口并使用它来构建需要序列号的对象。