was.txt
2.34 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
was wir haben.
- verschiedene Model (user, group, mailAccount, mailALias, etc.)
- diese koennen in verschiedenen Datenquellen liegen
- die Datenquellen werden mit verschiedenen Abfragesprachen abgefragt.
- das entsprechende Model bestimmt welche Daten abgefragt werden.
- die Datenquelle bestimmt wie diese Daten abgefragt werden.
Konflikt: bei ldap laesst sich das wie nur schwer von dem was abgefragt
werden soll trennen.
Moegliche Loesung: eine Factory, die ueber die Klasse des Models und
die Klasse der Datenbank eine solche konkrete Datenbank initialisiert.
Variation: anstatt eine factory zu bauen koennte man eine generische
Datenbankklasse bauen die eine Klassenmethode bekommt ueber die mit
dem reingegebenen Model dann eine Instanz erzeugt wird.
Problem: Die Datenbankklasse muss dann Initialisierungsinformationen
zu den entsprechenden Models kennen. (Implementierungsdetail)
Um die Datenbankklasse generisch zu halten sollte diese Information
woanders her kommen, allerdings nicht aus dem Model, da dann wiederum
die Model Implementierungsdetails der Datenbankklasse kennen muessen.
Evtl.: laesst sich was ueber Name conventions machen. Sauberer scheint
mir aber zu sein das es zu jeder Datenbankklasse eine Konfigurationsdatei
gibt in der man die Eckdaten fuer die Abfragen der einzelnen Model
konfigurieren kann.
ein yaml koennte evtl. so aussehen: (ldap.yml)
ldap: # => wenn es pro Datenbank ne eigenen datei gibt ist das nicht noetig
host: host.one.virtual
port: 389
queries:
User:
baseDn: ou=user,o=system,dc=weird-web-workers,dc=org
filter: (objectClass=posixAccount)
Group:
baseDn: ou=group,o=system,dc=weird-web-workers,dc=org
filter: (objectClass=posixGroup)
...
alternativ zu einer Datei koennte man eine Mapping Datei zu jeder Kombination
aus Model und Datenbanktyp anlegen...diese waeren schoen klein schnell gelesen
und geschrieben.
Dateistruktur:
- model - user.rb
- group.rb
- site.rb
- mailalias_role.rb
- mailalias_person.rb
- mailaccount.rb
- data - ldap.rb
- data - config - ldap.yml
- adapter - ldap.rb
- config - ldap - user.yml
- group.yml
- site.yml
- mailalias_role.yml
- mailalias_person.yml
- mailaccount.yml