简体   繁体   中英

Possible design pattern suggestions?

I was wondering if anyone can suggest a suitable design pattern for achieving the following:

I have a payslip, each slip shows my previous pay and my current pay. Each payslip should not need to duplicate fields, but rather point the current value to the previous value in the next slip.

On top of all this, I also need to be able to retrieve any given payslip at any point in time (preferably O(1)).

Here's a visual to help understand my problem.

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

Any help would be greatly appreciated

Give your PaySlip class a PreviousPaySlipKey property, which will be null for the very first pay slip. In your database, this should be a foreign key to the PaySlip 's Key property.

This way, if you have a PaySlip , you can find the key of the previous pay slip, and query the database for the payslip with that key.

Disclaimer : I am not a VB programmer , and the syntax below may not apply. Assuming VB has a Map interface, you could use that for your lookups O(1)

Map<Integer, CompositeValue> = some hash based map

and declare a class (assuming VB lets you create classes) CompositeValue as such:

class CompositeValue { 
    Integer previousKey;
    Value value;
}

Now, once you've retrieved a CompositeValue from the Map , you have the means to get it's real value ( value ), and to retrieve the previous value using previousKey .

Just a thought.

If we are talking DBs here, every payslip should be given a sequential ID (also called auto-increment in some RDBMS). This will be the primary key (so it's automatically indexed). Assuming you retrieved the payslip you wanted, here is how to get previous one from DB:

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

And the next one:

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

You will probably have payslips for multiple employees stored in a single table, so just add to the WHERE condition.

It is counter productive to store references to previous/next payslip on each payslip.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM