我对BLL和DAL的关系有点困惑. BLL是否应通过依赖注入封装DAL?或者BLL是否只对域对象和DAL单独保存/更新?例如,想象(在典型的MVC应用程序中)取消订单功能,要求您更新订单并更新库存.以下是我的行动的样子吗?public...

我对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# – 业务逻辑层应该访问数据库/数据访问层吗?


基础教程推荐
猜你喜欢
- C#实现Stripe支付的方法实践 2023-05-21
- C#后台调用前台JS函数方法 2023-01-11
- c# 预处理识别硬币的数据集 2023-03-27
- c# HttpClient设置超时的步骤 2023-04-09
- 找到整型阵列中最大值和最小值的几种方法总结 2022-12-01
- C# 动态加载程序集信息 2022-11-04
- SqlServer数据类型、C#SqlDbType对应关系及转换 2023-11-09
- Windows IIS ASP.NET Core中创建和使用HTTPS自签名证书 2023-09-28
- 详解C#App.config和Web.config加密 2022-12-14
- c#中WinForm使用OpencvSharp4实现简易抓边 2023-06-04