summaryrefslogtreecommitdiff
path: root/libopie/pim/DESIGN
blob: d878f45ee33a5cf1e2ea07ef2a40a92ce4deea3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Hija to the DESIGN of our OPIE PIM stuff

This design was firstly discussed in the train
from Frankfurt to Hannover between me (zecke ) and eilers.

We had a look at our pim implementation and the one from
trolltech and we looked what was missing.

GOALS:
  - clean implementation
  - share code
  - ObjectOriented Design
  - Scalable
  - Integration into common solutions like STL and Qt
  - Addition
  - Ease of Use
  
GENERAL:
  - use templates
  - have a common base class for all Records OPimRecord
  - use references instead of pointers
  - make use of QShared internally memory consumption

We've a 'public' and 'private' part in our lib
OPimAccessTemplate is the public part. This will be used
by 3rd party developers to access the PIMs.
OPimAccessBackend is the backend. You could also call it 
resource.

Both things need to be implemented for different kind of records. 
By using templates we can make sure we share code and the reason
not to use simple inheretance is that we can specialise quite easy.

For example we have OTodoAccess : public OPimAccessTemplate<OTodo>;
the we would do
OTodoAccess::List list = otodoAccess.all();
OTodoAccess::List::Iterator it;
for( it = list.begin(); it != list.end(); ++it );


as you can see from here it just behaves like you expect from Qt or STL.

The kewlest thing is that List and List::Iterator is free to use if you
want to implement your own OPimAccessTemplate.
You just have to sub class  it and voila you're done


Hope you enjoy using OPIE PIM

regards Holger 'zecke' Freyther