我对 BLL 和 DAL 的关系有点困惑。BLL 是否应该通过依赖注入封装 DAL?或者 BLL 是否应该只作用于域对象和 DAL 分别保存/更新?
例如,想象(在典型的 MVC 应用程序中)一个取消订单功能,要求您更新订单并更新库存。以下是我的行动的样子吗?
public ActionResult CancelOrder (Guid orderId) {
Order order = orderRepository.Get(orderId);
StockItem stockItem = stockRepository.Get(order.StockItemId);
_orderService.CancelOrder(order, stockItem);
orderRepository.Update(order);
orderRepository.Update(stock);
Return View();
}
还是应该更像以下?
public ActionResult CancelOrder (Guid orderId) {
_orderService.CancelOrder(orderId);
Return View();
}
(within OrderService)
public void CancelOrder(Guid orderId) {
Order order = orderRepository.Get(orderId);
StockItem stockItem = stockRepository.Get(order.StockItemId);
order.Cancelled = true;
stockItem.AmountInStock = stockItem.AmountInStock + order.Amount;
orderRepository.Update(order);
orderRepository.Update(stock);
}
使用此选项,所有内容都将由 BLL 处理,包括数据访问。将注入存储库以避免紧密耦合。然后,任何实体检索都将采用与_orderService.GetOrder(orderId);
直接进入存储库不同的形式。
请原谅这些例子的粗俗,因为我没有很多时间。我写的任何东西都有意义吗?还是我在荒野中?