【问题标题】:Creating a Buffer with the Same Name as the Database Table创建与数据库表同名的缓冲区
【发布时间】:2011-03-30 14:44:41
【问题描述】:

我在很多地方都遇到过这段代码:

DEFINE BUFFER Customer FOR Customer. 

我有两个问题:

  1. 这样做的目的是什么?为什么创建与表同名的缓冲区有好处?

  2. 在编写代码访问这个表/缓冲区时,Progress如何知道是直接访问DB还是通过缓冲区?

【问题讨论】:

  • @Tom Bascom 可能知道,他在进步' Jon Skeet,对不起,如果我说他的名字是徒劳的

标签: progress-4gl


【解决方案1】:

1:通常用于管理缓冲区的范围。

例如,如果您有一个过程,其中有多个内部过程都访问同一个表,那么该表的默认缓冲区将最终限定为顶级过程块。例如 -

procedure p1:
    find first customer no-lock.
end.

procedure p2:
    find last customer no-lock.
end.

最终会将客户缓冲区的范围限定为包含过程。如果您试图使您的内部程序保持松散耦合和自包含,那么您可能不想要这种行为。因此,您将在每个内部过程中定义一个缓冲区。

Obv 定义缓冲区还有其他原因,但是当您看到定义与表同名的缓冲区的代码时,通常是关于范围。

2:它总是通过缓冲区访问数据库。每个表都有一个与表同名的默认缓冲区,所以

find first <buffername>.

将查找名为 buffername 的缓冲区,该缓冲区可能是显式定义的缓冲区或隐式默认缓冲区。如果存在,优先级将转到明确定义的缓冲区。

【讨论】:

  • 这种技术的一大优势是它可以防止意外的副作用,特别是记录锁,影响主程序或其他内部程序。
  • 感谢 cmets Gordon - 这是一个很好的解释。我理解这背后的逻辑,但我不同意命名约定。对我来说,缓冲区仍应以“b-”或其他内容为前缀,以明确定义您正在引用缓冲区。使用 DB 表名作为缓冲区名似乎只会使代码比它需要的更混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 2018-03-15
相关资源
最近更新 更多