c# – 业务逻辑层应该访问数据库/数据访问层吗?
作者:互联网
我对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)的形式;因为决定直接进入存储库.
请原谅示例的粗糙,因为我没有太多时间.我写的任何东西都是有意义的,还是我在荒野中?
解决方法:
绝对不是第一个将业务逻辑嵌入控制器的选项.问题不在于控制器本身访问数据对象,而是必须遵循业务规则规定的过程.此过程在控制器中没有位置.
因此,您应该使用第二个选项,或者可能使取消订购方法.如果您已经编写了类似的代码,那么请保持一致性.
标签:c,design-patterns,data-access-layer,business-logic-layer 来源: https://codeday.me/bug/20190613/1231944.html