一个简单的问题.有些情况下,我获取数据,然后在我的BLL中处理它.但我意识到可以在我的存储过程中完成相同的处理/过滤,并将过滤后的结果返回给BLL.
哪个更好,在DB处理或在BLL中处理?为什么?
考虑一下这个场景,我想检查一下产品是否存在于我的数据库中,如果它存在,请将其添加到订单中(以下是Nour Sabony的回答示例)现在我可以在我的BLL上进行检查,或者我在存储过程也是如此.如果我将事物组合到一个过程中,我将整个操作减少到一个db调用.那个更好吗?
作为一般规则:任何合理地属于数据库职责并且可以在您的数据库中完成的事情,都在您的数据库中完成。
好吧,最好的答案是在数据库,但你可能会考虑像Linq2Sql这样的东西,我的意思是在表示层编写一个表达式,它会在数据访问层被解析为Sql语句。
当然也有一些情况BLL应该从DAL获取一些数据,处理它,然后将其返回给DAL。举个例子:PutOrder(Order value) 过程,它应该检查订购产品的可用性。
public void PutOrder(Order _order)
{
foreach (OrderDetail _orderDetail in _order.Details)
{
int count = dalOrder.GetProductCount(_orderDetail.Product.ProductID);
if (count == 0)
throw new Exception (string.Format("Product {0} is not available",_orderDetail.Product.Name));
}
dalOrder.PutOrder(_order);
}
Run Code Online (Sandbox Code Playgroud)
但如果您要创建浏览视图,从 Dal 获取所有数据然后选择在浏览视图中显示的内容并不是一个好主意(从性能角度来看)。
以下可能会有所帮助:
public List<Product> SearchProduts(Criteria _criteria)
{
string sql = Parser.Parse(_criteria);
///code to pass the sql statement to Database procedure and get the corresponding data.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |