我有点困惑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);
的形式,而不是直接访问存储库。请原谅示例的简陋,因为我没有太多时间。我的所写的内容是否有任何意义,还是我在荒野中迷失了呢?