可能的设计模式建议?

时间:2014-06-24 15:04:11

标签: vb.net performance algorithm

我想知道是否有人可以提出合适的设计模式来实现以下目标:

我有工资单,每张单显示我以前的工资和我目前的工资。每个工资单应该不需要复制字段,而是将current值指向下一个单据中的previous值。

除此之外,我还需要能够在任何时间点检索任何给定的工资单(最好是O(1))。

这是一个有助于理解我的问题的视觉效果。

[key:"1"]     [key:"2"]     [key:"3"]
+------+      +------+      +------+
|      |      |      |      |      |
| Curr | <--- | Prev |      | Curr |
| Null |      | Curr | <--- | Prev |
|      |      |      |      |      |
+------+      +------+      +------+

非常感谢任何帮助

3 个答案:

答案 0 :(得分:2)

为您的PaySlip课程提供一个PreviousPaySlipKey属性,对于第一个工资单,该属性将为null。在您的数据库中,这应该是PaySlip Key属性的外键。

这样,如果您有PaySlip,您可以找到上一个工资单的密钥,并使用该密钥查询数据库中的工资单。

答案 1 :(得分:1)

免责声明我不是VB程序员,以下语法可能不适用。假设VB具有Map接口,您可以将其用于查找O(1)

Map<Integer, CompositeValue> = some hash based map

并声明一个类(假设VB允许你创建类)CompositeValue如下:

class CompositeValue { 
    Integer previousKey;
    Value value;
}

现在,一旦您从CompositeValue检索到Map,您就有办法获得它的真实价值(value),并检索使用previousKey的前一个值。

只是一个想法。

答案 2 :(得分:0)

如果我们在这里讨论数据库,那么应该为每个工资单提供一个顺序ID(在某些RDBMS中也称为自动增量)。这将是主键(因此它会自动编入索引)。假设您检索了所需的工资单,以下是如何从DB中获取前一个工资单:

SELECT TOP 1 * FROM PaySlip WHERE PaySlipID < @PaySlipID ORDER BY PaySlipID Desc

下一个:

SELECT TOP 1 * FROM PaySlip WHERE PaySlipID > @PaySlipID ORDER BY PaySlipID

您可能拥有存储在单个表中的多个员工的工资单,因此只需添加到WHERE条件中。

在每个工资单上存储对上一个/下一个工资单的引用是有效的。