1

我正在使用 DAL 服务从数据库中检索数据。

让我们观察最简单的情况,即我从数据库中检索一个对象。

检索该对象后,我正在根据某些业务逻辑对其属性进行一些更改,然后我想更新持久数据库中的对象。

但是,其他一些客户端(甚至可能是我不知道存在的客户端)更改了数据库中下划线对象的状态,我在尝试更新时发现了这一点。

在这种情况下我该怎么办?

我应该抛出异常吗?

我应该尝试只更新我更改的字段吗?

在基于持久数据执行业务逻辑时,是否应该锁定该表以进行写入?

盖伊

4

2 回答 2

3

我认为你应该做什么取决于你想要达到的目标。在我看来,您的主要选择:

  • 预先锁定- 主要优点和缺点 - 在您提交之前占用数据库,更简单。

  • 不要预先锁定,合并以防其他人更新它- 主要缺点 - 合并可能非常复杂

我会选择第一个,但我会尽量减少锁定时间(即我会弄清楚在锁定对象之前我想要做的所有更改是什么)。

无论如何,我不认为这是一个例外情况..所以我不会抛出异常。

于 2013-09-12T07:03:45.050 回答
0

这是非常主观的,它取决于你到底想要做什么。

我应该抛出异常吗?

  • 如果您不期待其他用户的更新,您应该这样做。例如,您的软件正在尝试预订一个已经被某人预订的座位,您将抛出说 SeatAlreadyBookedException 并通过记录或显示适当的消息来适当地处理它

我应该尝试只更新我更改的字段吗?

  • 如果您没有使用现有状态进行更新,或者您希望您的更改成为覆盖其他用户已经完成的任何更改的最终更改,您可以这样做。例如,如果要更新项目截止日期的新日期。

在基于持久数据执行业务逻辑时,是否应该锁定该表以进行写入?

  • 锁定表会影响整体吞吐量。您的应用程序逻辑应该处理这些事务并维护数据完整性。
于 2013-09-12T10:35:58.410 回答