【问题标题】:Where should I write the business logic? In the front end (business layer) or in a stored procedure?我应该在哪里写业务逻辑?在前端(业务层)还是在存储过程中?
【发布时间】:2012-02-25 19:06:53
【问题描述】:

我正在编写一个带有 SQLServer 数据库的 ASP.NET 应用程序,我必须在其中计算应用程序成员的费率。这些计算会影响 10 多个数据库表。

我相信我有两个选择:

  1. 在数据访问层,从数据库的第一个表中取出一个成员的数据并返回给业务层。到达那里后,对获取的数据执行一些计算以生成要保存在第二个表中的新数据。最后,回调到数据访问层保存结果。之后,重复整个过程,从第二个表中提取信息以计算要保存在第三个表中的结果,并继续对所有必要的表执行此操作。

  2. 使用存储过程封装计算和保存数据库事务中正确表中成员的新费率。

您认为哪个选项最好,为什么?如果我使用第一个选项,我应该如何在业务逻辑层的一个 ADO.NET 事务中执行所有插入和更新?我目前被禁止在数据访问层之外使用 ADO.NET 事务。

【问题讨论】:

    标签: asp.net architecture business-logic application-design


    【解决方案1】:

    IMO 这取决于性能和模块化设计需要给予多少优先级。

    如果这是一个交易应用程序,我必须从不同的表中即时计算价格,我会使用存储过程

    • 在一定量的负载下具有更好的性能,但是当查询过多时,分布式数据库就变得必不可少
    • 一个缺点是,如果您将来想要迁移到不同的数据库(大多数情况下人们不会),那么您必须将存储的过程移植到新的数据库中

    我的另一个选择是将大部分值保存在分布式缓存(如 memcache)中,并在业务层中进行计算。

    • 这些值将预先填充到缓存中,并且缓存将在发生更改时刷新。
    • 这为删除数据库依赖性提供了灵活性。

    但在我看来,您的操作在功能上非常依赖数据库,并建议使用存储过程路由。如果你觉得第二种缓存方式可行,值得一试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 2016-12-18
      • 2012-07-16
      • 2011-06-01
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多