我对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# – 业务逻辑层应该访问数据库/数据访问层吗?
基础教程推荐
- FtpHelper实现ftp服务器文件读写操作(C#) 2022-11-06
- c# 使用线程对串口serialPort进行收发数据(四种) 2023-06-22
- c# – 如何将文件从本地存储传递到Windows Phone 8.1中的库? 2023-09-18
- C# 文件上传下载(Excel导入,多线程下载)功能的实现代码 2022-11-10
- C#使用yield关键字构建迭代器详解 2022-11-15
- C#队列的简单使用 2023-05-26
- windows系统下,如何在C#程序中自动安装字体 2023-03-14
- C#开发WinForm根据条件改变DataGridView行颜色 2023-05-25
- Unity多屏幕设置的具体方案 2023-06-05
- C#在foreach遍历删除集合中元素的三种实现方法 2023-02-03