NHibernate:可以直接从我的实体类操作存储库吗?

时间:2012-05-09 10:47:22

标签: .net nhibernate fluent-nhibernate repository repository-pattern

我通过Fluent NHibernate的AutoPersistenceModel使用NHibernate实现了自定义存储库实现。

我有一堆实体类,我坚持使用此存储库。

问题是,将实际业务逻辑放在这些实体类中是否可以?

如果某些业务逻辑需要操作存储库本身,它仍然可以吗? (例如,某些方法需要创建一些新实体,其中一些需要更新现有的实体等)。

我知道NHibernate具有强大的持久性无知功能,但我仍然不确定这个细节。提前感谢您的回答!

1 个答案:

答案 0 :(得分:1)

逻辑w.r.t实体应限于它的“业务领域”。 更新实体内的其他实体/基础设施是一个非常糟糕的主意/设计。

Order --> OrderLines
Order {OrderId, OrderDate, Customer, OrderLines, ...}
OrderLines {OrderLineId, Order, Item, Price, Quantity, Deliveries, DeliveredQuantity, ...}

OrderDelivery --> OrderDeliveryLines
OrderDelivery {OrderDeliveryId, Customer, DeliveryDate, ...}
OrderDeliveryLines {OrderDeliveryLineId, OrderDelivery, OrderLine, DeliveryQuantity, ....}

orderLine的交付数量是所有交付数量的总和。

因此,在上述情况下,通过订单创建/更新交货(即订单流程)是错误的,交货的deliveryLine将针对相应的orderLine wrt交付数量(在交货流程中)。

当明确定义事务边界时,您永远不会要求流程逻辑进入您的“业务领域”

http://domaindrivendesign.org/