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