hotti: Trennung DAL?AL

Beitrag lesen

Hello,

wenn Du Gehirnschmalz darauf verwenden willst, dann mach Dir auch gleich Gedanken darüber, wohin in diesem Gesamtkunstwerk die Geschäftsregeln, Zugriffsrechte und Historiefunktionen gehören.

in AL

In der Praxis wäre es außerdem schön, wenn Appliaktionen auf Veränderung der Datendefinitionen reagieren könnten, also automatisch realisieren, ob diese noch zur Applikation passen, oder nicht.

Wo willst Du das unterbringen?

Im AL wird auf eine entsprechende Datenstruktur zugegriffen. Das ist unabhängig von das was Du "Datendefinition" nennst. Veränderungen in der Datenhaltungsschicht (DAL) wie z.B. alter table usw. erfordern keinen Eingriff in die Anwendung, solange die Datenstruktur nicht geändert werden muss. Änderungen sind nur in der Vermittlungsschicht notwendig. Die Trennung DAL?AL ermöglicht es, die Datenhaltung bei Bedarf von 'DB' auf 'Datei' umzustellen, ohne dass der Code in AL geändert werden muss, es wird nur die Vermittlungsschickt ausgetauscht, in welcher die Bindung der Datenstrukturen an DAL erfolgt.

Beispiel in Perl (in AL, main-Script):

  
# Binde einen hash (Datenstruktur) an die Klasse der Vermittlungsschicht  
# Klasse TieLog vermittelt zu MySQL, Logtabelle  
tie my %log, 'TieLog' or die $@;  
  
# Füge einen neuen Eintrag in die Logtabelle ein  
%log = (url => '/', ts => time, ref => 'referrer', hugo => 'Hugo');  
  
# Änderungen sichern  
untie %log;  

Keinerlei SQL-Statements in main(), die liegen alle in der Klasse 'TieLog'.

Noch ein Beispiel, weil es so schön geht ;)

  
tie (my @dummy, 'TieLog', { url => '/apps', callback => \&cb_array}) || die "Fehler: $@";  
print "============= Daten kommen ==============\n\n";  
tied(@dummy)->callback;  
print "\n============ Ende der Ausgabe ===========\n";  

Dahinter verbirgt sich ein Select mit Where auf url. Natürlich muss es das sein, was in der main() wirklich gebraucht wird. So funktioniert der Zugriff auf die Benutzer auch über eine Datenstruktur. Die ist mittels tie() derzeit an eine Datei (DAL) gebunden, kann jedoch mit nur einer Zeile-Änderung (andere Tie-Klasse) auch an MySQL gebunden werden.

Hotti