我对 DDD、工作单元、域服务、应用程序服务等的所有信息有点不知所措。我试图弄清楚一个不了解持久性的域模型最终是如何持久化的,特别是在单元的上下文中工作和实体框架。假设我有一个 Order 聚合根,我试图将其保留在我的持久性无知域模型(我的架构洋葱的核心)中:
public class Order : EntityBase
{
public int Id { get; private set; }
public int MarketplaceId { get; private set; }
public int CustomerId {get; set;}
public List<OrderItem> Items { get; private set; }
public List<OrderComment> Comments { get; private set; }
public void AddItem(OrderItem item) { /**add item**/ }
public void AddComment(OrderComment comment) { /**add comment**/ }
public override bool Validate() { /**validate**/ }
public void Cancel() { /**cancel**/ }
}
假设我有一个更新 Order 实体上的属性的流程,例如它更改了与订单关联的 CustomerId。
我的域层中有一个 IOrderRepository,它将有一个具有如下功能的实现(在外层中):
Order GetOrder(int orderId)
{
//get entity framework order, items, etc.
//map to domain-layer order and return domain-layer order
}
void UpdateOrder(Order order)
{
//get ENTITY FRAMEWORK order, order items, order comments, etc.
//take DOMAIN order (passed in to this function), and update EF items fetched above
//use a single EF unit of work to commit these changes
}
我的方法有问题。UpdateOrder 函数对于一个小改动来说似乎很重;但如果我的存储库不知道持久性无知域模型上的哪些项目已更改,我似乎也必须这样做。我应该在单独的存储库函数中处理每种类型的更新吗?更新市场(整数市场 ID),更新客户(整数客户 ID)?
当我输入这个时,我也在想......也许我上面的方式不是太重?如果我更改了一个属性,即使我正在执行上述所有操作,也许 Entity Framework 会识别出分配的值是相同的,并且只会将一个 db 列更新发送到 SQL?
如何获取我的 Order 域模型(获取非常简单),对其执行一些可能在范围内受限的操作,然后使用 Entity Framework 持久化模型?