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

问题描述 投票:0回答:1

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

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

问题是,把真正的业务逻辑放在这些实体类里面可以吗?

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

我知道NHibernate有强大的persistence ignorance特性,但是我对这个细节还是不太确定

.net nhibernate fluent-nhibernate repository repository-pattern
1个回答
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 的交付数量是针对它进行的所有交付的总和。

因此在上述情况下,通过订单(即订单流程)创建/更新交货是错误的,交货的交货线将针对相应的 orderLine w.r.t 交货数量(在交货过程中)进行制作。

当事务边界被明确定义时,您将永远不需要流程逻辑潜入您的“业务领域”

http://domaindrivendesign.org/

© www.soinside.com 2019 - 2024. All rights reserved.