Zur Architektur von Access-Anwendungen

Access bietet spätestens seit dem Moment, in dem VBA es erlaubt, Klassenmodule zu entwickeln, ausreichende Möglichkeiten für eine gute logische Strukturierung der Anwendungsentwicklung. Eine Drei-Schichten-Architektur war eigentlich zuvor schon möglich: Man konnte die Oberfläche in den Formularen und Berichten programmieren, die Geschäftslogik in den Basic-Modulen ablegen und die Datenhaltung natürlich in den Tabellen implementieren. Eine „echte“ Drei-Schichten-Architektur ist das zwar nicht, da die Formulare ja via direkter Datenanbindung an der Business Layer vorbei auf die Tabellen zugreifen, aber das tut den Möglichkeiten einer guten logischen Anwendungsarchitektur keinen Abbruch.

Auf diese direkte Anbindung der Formulare an die Tabellen zu verzichten und auch für die Formulare Datenzugriffsobjekte zu schaffen, hat sich insgesamt nicht als sinnvoll erwiesen: Die Anwendung wird eigentlich nicht klarer strukturiert, eher steigt die Unübersichtlichkeit – auch Performanceverluste können die Folge sein.

Sinnvoll ist aber bei den meisten Anwendungen, für jedes Geschäftsobjekt ein Klassenmodul bereitzustellen, welches die Berechnungen, Transformationen und Manipulationen, die für dieses Objekt benötigt werden, enthält.

Beispiel: In einer Projektverwaltung gibt es eine Projekt-Tabelle, in der das Start- und das Endedatum des Projekts gespeichert werden. Natürlich gibt es auch einen Dialog, in dem diese Daten ei gegeben werden können – und dieser Dialog ist direkt mit der Tabelle verbunden. Zusätzlich gibt es ein Klassenmodul für das Projekt, in dem aus dem Start- und dem Endedatum die Projektdauer berechnet wird.

Wichtig ist bei diesem Klassenmodul, dass es keine Verweise auf die Oberfläche, also auf den Dialog, enthält. So kann dieses Modul auch noch verwendet werden, wenn die Oberfläche durch eine andere ersetzt wird, etwa, wenn aus der Access-Anwnedung eine .NET-Applikation wird.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.