工作单元是一个很好的模式,我一直将它整合到我们的存储库CUD操作中......
我认为缺点是,当涉及到创建时,无法将与工作单元关联的多个对象的ID(或者可能是响应DTO)返回到调用代码()方法。
例如,假设我有一个Customer和一个Order对象。我在我的调用代码中创建了新的临时对象,通过工作单元的.Create()方法添加它们,然后提交工作单元。
虽然我的对象被正确地保存到数据库中,但我没有从我的消费代码中调用每个对象的Repository.Create(),工作单元是,所以我真的没有机会将任何信息发送回与每个特定对象相关的消费代码。
有什么想法吗?是否可以(或者更好的问题,应该)将工作单元扩展为返回某种类型,也许是一个自定义对象,它可能具有在字典中具有新ID的对象类型或类似的东西?
我只是不知道这是否是工作单位的适当任务。在书籍和博客的例子中,我还没有真正看到这个问题。
有什么想法吗?
答案 0 :(得分:0)
工作单位本身并不排除返回的ids或物体。
问题可能是您正在使用太高粒度的工作,即创建多个对象,您可能希望在单个“单元”中捕获该ID(尽管在您的示例中,返回一个订单对象,有一个customerid会解决问题)。我的建议是保持你的单位小,通常只处理1个聚合根。
在说这是一个与命令查询责任隔离(CQRS)一起使用的模式的真正问题,例如事件采购。
在这种情况下,有两种方法可以解析对象ID: 1.有一个'对象创建'回调 2.给你的瞬态对象guid id,并使用Identity Mapper检索创建的ID。
希望这有帮助
史蒂芬