was.txt 2.34 KB
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