Was sind Schichten?
In der Software-Architektur wird meist zwischen drei Schichten unterschieden, daher spricht man auch von der Drei-Schichten-Architektur. Jede Schicht ist dabei ein Programmteil, der in der Anwendung eine bestimmte Aufgabe übernimmt. Eine Schicht entspricht meist einem oder mehreren Projekten bzw. DLLs. Unterschiedliche Aspekte der Anwendung, wie beispielsweise Datenzugriff, Datenverarbeitung oder Benutzeroberfläche, werden dort jeweils unabhängig voneinander implementiert. Daher spricht man in dem Zusammenhang auch von der Trennung der Schichten. Durch fest definierte Schnittstellen zwischen den Schichten kann die jeweils höhere Schicht auf die darunterliegende(n) zugreifen, ohne etwas über deren speziellen Implementierung wissen zu müssen (siehe Bild).
Welche Schichten gibt es?
- Präsentationsschicht
Die Präsentationsschicht (englisch: presentation layer) entspricht der Benutzerschnittstelle (englisch: [graphical] user interface, UI bzw. GUI) und übernimmt die Aus- und Eingabe der Daten. Hier befinden sich alle Funktionen zum Anzeigen der Daten auf dem Bildschirm (oder auf anderen Ausgabegeräten) sowie die Verarbeitung von Maus- und Tastatureingaben (oder anderen Eingabegeräten). Je nach Art der Anwendung kommen hier unterschiedliche Technologien zum Einsatz, so z.B. WinForms oder WPF für Desktop-Anwendungen sowie ASP.NET WebForms oder ASP.NET MVC für Web-Anwendungen.
- Logikschicht
Die Logikschicht (englisch: logic layer, bussiness logic, BL) übernimmt die Verarbeitung der Daten. Hier werden alle anwendungsspezifischen Berechnungen implementiert und unter dem Begriff Geschäftslogik bzw. Businesslogik zusammengefasst. Als "Model" werden dabei alle Klassen bezeichnet, welche die Geschäftslogik beinhalten.
- Datenzugriffsschicht
Die Datenzugriffsschicht (englisch: data access layer, DAL) übernimmt die Verwaltung der Daten. Hier befinden sich die Datenstrukturen zum Zugriff auf Datenbanken, XML-Dateien, Webservices, das Dateisystem o.ä.
Kurz gesagt: alles, was mit dem Lesen und Speichern von Anwendungsdaten zu tun hat.
Was ist der Vorteil der Schichtentrennung?
Die Vorteile der Schichtentrennung ergeben sich durch die Vermeidung komplexer Abhängigkeiten. Die Präsentationsschicht ist beispielsweise nicht mehr abhängig von dem verwendeten Datenbanksystem, sondern kennt nur noch die Schnittstellen der Logikschicht und gelegentlich auch der Datenzugriffsschicht. Umgekehrt sind aber auch die beiden anderen Schichten nicht mehr von der für die Benutzerschnittstelle verwendeten Technologie abhängig.
Die Abhängigkeiten zwischen den Schichten wird auf eine fest definierte Schnittstelle reduziert, daher kann man die einzelnen Schichten unabhängig voneinander entwickeln, debuggen und testen. Sie können auch unabhängig voneinander weiterentwickelt oder sogar ausgetauscht werden, solange sich dadurch nicht die Schnittstelle zu den anderen Schichten ändert. Wird ein Programm beispielsweise von einer Datenbank auf einem Webservice umgestellt, dann muss lediglich die Datenzugriffsschicht neu entwickelt werden. Um eine Web-Anwendung auf eine Desktop-Anwendung umzustellen, muss im Idealfall nur die Präsentationsschicht ausgetauscht werden.
Somit ist die Schichten-Architektur nicht nur ein Weg, Programmfehler durch zu komplexe Abhängigkeiten zu vermeiden, sondern auch eine unumgängliche Voraussetzung für die Entwicklung von professionellen Software-Anwendungen. Daher ist die Schichtentrennung, besonders die Drei-Schichten-Architektur, heute ein üblicher Standard, der letztendlich eine effektive Softwareentwicklung im Team überhaupt erst ermöglicht.
Was ist der Unterschied zwischen einem "layer" und einem "tier"?
In der (englischen) Fachliteratur wird teilweise zwischen logischer und physischer Schichtentrennung unterschieden. Der englische Begriff "layer" steht dann für eine Schicht innerhalb einer Anwendung, also für eine logische Strukturierung von Elementen, die zusammen eine Software bilden. Sind die Schichten jedoch physisch auf verschiedene Rechner verteilt (also z.B. bei einer Server-Client-Anwendung), spricht man stattdessen von "tier". Daher unterscheidet man im Englischen zwischen Multilayered architecture und Multitier architecture.
Bild: Aufrufe in einer Drei-Schichten-Architektur