上一主题: 案例研究 16:业务逻辑设计模式

下一主题: 案例研究 18:注册

案例研究 17:内置功能

ACE 具有针对各种用途的内置功能和工具。 使用此内置功能最好是在 VBS 中写入。 由于 VBS 为解释性语言,因此在 VBS 中重新生成它会影响性能。

以下是内置功能的列表以及使用它们的适当方式:

IsWithinTimeslot

这是最简单的内置功能。 其目的是使业务逻辑告知系统当前是否位于某个时间段内。 这将消除在时间段进入和时间段退出函数中管理变量的需要,以便可以执行相同的操作。 例如,不要运行以下代码:

Dim amIWithinATimeslot
Sub OnTimeslotEnter(time)
     amIWithinATimeslot = 1
End sub
Sub OnTimeslotExit(time)
     amIWithinATimeslot = 0
End sub
Sub OnEvent(eventDetails)
     If amIWithinATimeslot = 1 Then
           count = count + 1
     End if
End sub

而可以运行以下较简单的代码:

Sub OnEvent(eventDetails)
     If context.IsWithinTimeslot Then
          count = count + 1
     End if
End sub

如果您要使用或保留与时间段开始和结束时间戳相关的信息,此功能将无法满足您的需求。 但通常不需要这样做,因此上述代码已足够了。

TimeOfLastEvent

此函数可为您提供处理的最后一个原始数据或中间数据事件的时间戳。 这意味着,您无需在事件处理程序中保存此信息,因为可通过此函数直接获得。 例如:

Function result
     Dim LastEventTimestamp
     LastEventTimestamp = Context.TimeOfLastEvent
End function

TimeOfLastEventHandler

此函数将返回最后由 ace 调用的事件处理程序的时间戳。 这不仅包括原始和中间数据事件处理程序,还包括已调用的任何系统事件。 这在未通过函数(如 result 函数)接收时间的事件处理程序中尤其有用。 例如:

Function result
     Dim LastEventHandlerTimestamp
     LastEventHandlerTimestamp= Context.TimeOfLastEventHandler
End function

NetTime

此功能允许您指定两个时间戳,并在这两个时间戳之间接收系统在当前规则的时间段内的净时间(以秒为单位)。 这尤其是一种繁琐功能,不需要在 VBS 中实施。 在 VBS 中实施此功能需要保留所有时间段进入和退出的列表,或计算进入的时间段直接退出的每个时间之间的差异,以便确定它们之间的时间范围。 在极端条件下,这可能会发生很多次,并对计算性能产生负面影响。 内部函数在显著优化后功能保持相同,因此会更高效。 例如:

Function result
     Dim MyNetTime
     MyNetTime = Tools.NetTime(MyBeginTimestamp, MyEndTimestamp)
End function

Context 对象

Context 对象具有各种参数,可以提供以下相关信息:

使用安全 ODBC 从数据库直接访问此信息效率极低且没有意义,因为该信息可在 Context 对象中直接获得。 如果可能,始终使用内置功能是一种获取信息的方式。