Transactions 表示层应该控制业务事务吗?

Transactions 表示层应该控制业务事务吗?,transactions,presentation,Transactions,Presentation,假设具有典型的数据访问层、业务层和表示层架构 数据访问层有存储库和一个工作单元 业务层具有使用存储库的数据服务类 现在假设我有Order实体和OrderItem实体,从业务角度来看,我可以单独向数据库添加Order对象,或者添加一个Order及其OrderItems,或者为现有订单添加一个列表OrderItems 您认为数据服务API应该是什么样子 解决方案1: OrderDataService(UnitOfWork uow) // Constructor OrderDataService.Ad

假设具有典型的数据访问层、业务层和表示层架构

数据访问层有存储库和一个工作单元

业务层具有使用存储库的数据服务类

现在假设我有
Order
实体和
OrderItem
实体,从业务角度来看,我可以单独向数据库添加
Order
对象,或者添加一个
Order
及其
OrderItems
,或者为现有
订单添加一个列表
OrderItems

您认为数据服务API应该是什么样子

解决方案1:

OrderDataService(UnitOfWork uow) // Constructor
OrderDataService.Add(Order order);
OrderItemDataService() // Constructor
OrderItemDataService.Add(OrderItem item);
OrderDataService() // Constructor
OrderDataService.Add(Order order);
OrderDataService.AddWithItems(Order order, List<OrderItem> items);
OrderItemDataService() // Constructor
OrderItemDataService.Add(List<OrderItem> items);
然后在表示层使用这两种方法形成所有可能的变体,即单独添加
订单
、使用
订单项
等。在表示层将这些操作包装到事务(工作单元)中

解决方案2:

OrderDataService(UnitOfWork uow) // Constructor
OrderDataService.Add(Order order);
OrderItemDataService() // Constructor
OrderItemDataService.Add(OrderItem item);
OrderDataService() // Constructor
OrderDataService.Add(Order order);
OrderDataService.AddWithItems(Order order, List<OrderItem> items);
OrderItemDataService() // Constructor
OrderItemDataService.Add(List<OrderItem> items);
OrderDataService()//构造函数
OrderDataService.Add(订单);
OrderDataService.AddWithItems(订单、列表项);
OrderItemDataService()//构造函数
添加(列表项);

然后在这些方法中创建事务(工作单元),让表示层完全忽略最简单的事务形式,只需为每个事务调用一个方法,让业务层负责其余的事务

什么是UnitOfWork
?UnitOfWork是一种用于管理业务事务的模式。我认为这个问题没有一个正确的答案。