我有一个通过 Fluent NHibernate 的 AutoPersistenceModel 使用 NHibernate 的自定义存储库实现。
我有一堆实体类,我坚持使用这个存储库。
问题是,将真正的业务逻辑放在这些实体类中可以吗?
如果某些业务逻辑需要操作存储库本身,是否还可以?
(例如,一些方法需要创建一些新实体,其中一些需要更新现有实体等)
我知道 NHibernate 具有强大的持久性无知功能,但我仍然不确定这个细节。提前感谢您的回答!
我有一个通过 Fluent NHibernate 的 AutoPersistenceModel 使用 NHibernate 的自定义存储库实现。
我有一堆实体类,我坚持使用这个存储库。
问题是,将真正的业务逻辑放在这些实体类中可以吗?
如果某些业务逻辑需要操作存储库本身,是否还可以?
(例如,一些方法需要创建一些新实体,其中一些需要更新现有实体等)
我知道 NHibernate 具有强大的持久性无知功能,但我仍然不确定这个细节。提前感谢您的回答!
Logic wrt Entity 应该被限制在它的“业务领域”中。更新实体内的其他实体/基础设施是一个非常糟糕的想法/设计。
IE
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 的交付数量是针对它进行的所有交付的总和。
因此,在上述情况下,通过订单(即订单流程)创建/更新交付是错误的,交付的交付线将根据交付数量(在交付流程中)的相应订单线进行。
明确定义事务边界后,您将永远不会要求流程逻辑潜入您的“业务领域”