Persistenz (über englisch persistence von ursprünglich lateinisch persistere ?verharren, stehen bleiben“) bezeichnet in der Informatik die F?higkeit von Computerprogrammen, Daten dauerhaft und unabh?ngig von der aktuellen Programmausführung zu speichern. Dabei werden Daten so gespeichert, dass sie auch nach einem Programmende oder Systemneustart wieder vollst?ndig zur Verfügung stehen.
Die technische Umsetzung erfolgt durch Speicherung in Datenbanken, Dateisystemen oder Konfigurationsdateien. Die Windows-Registry ist ein typisches Beispiel für eine solche persistente Speicherung von Systemeinstellungen. Softwareanwendungen nutzen ?hnliche Mechanismen, um Benutzereinstellungen und Arbeitsst?nde zu sichern.
Persistenz gew?hrleistet Datenkontinuit?t und Zuverl?ssigkeit. Sie schützt vor Informationsverlust bei Systemabbrüchen und erm?glicht die Wiederaufnahme von Arbeitsprozessen. Ein konkretes Anwendungsbeispiel ist das Speichern von Daten vor dem Programmende, sodass beim n?chsten Start Informationen wie Spielst?nde, Anwendungskonfigurationen oder Gesch?ftsprozessdaten wiederhergestellt werden k?nnen. Es handelt sich also um sehr grundlegende Anforderungen, um die Kontinuit?t, Zuverl?ssigkeit und Verfügbarkeit von Informationen in einer digitalen Welt zu gew?hrleisten.
Persistenz bei objektorientierten Programmen
[Bearbeiten | Quelltext bearbeiten]Die Implementierung von Persistenz in objektorientierten Programmen spielt eine entscheidende Rolle, um den Zustand von Objekten über verschiedene Programml?ufe hinweg zu bewahren. Diese wichtige Funktionalit?t erm?glicht es, die Daten von Objekten dauerhaft zu speichern und wiederherzustellen, selbst nachdem das Programm beendet wurde oder der Computer neu gestartet wurde.[1][2] Diese Eigenschaft ist von besonderer Bedeutung, da sie die F?higkeit schafft, essentielle Informationen und Daten zu behalten und wiederzuverwenden, was die Entwicklung vieler Anwendungen erheblich verbessert.
Ein Hauptgrund für die Notwendigkeit von Persistenz liegt in der Erfordernis, den Zustand von Objekten über Programml?ufe hinweg zu bewahren. In vielen Anwendungen der objektorientierten Programmierung ist es unerl?sslich, dass bestimmte Daten und Informationen auch nach Beendigung des Programms weiterhin vorhanden sind.[3] Beispielsweise k?nnte in einem Anwendungsfall, in dem Aufgabenverwaltung betrieben wird, die F?higkeit, den Status von Aufgaben, Benutzern und Projekten zu speichern, sicherstellen, dass diese Informationen nicht verloren gehen, wenn das Programm geschlossen wird.
Die Implementierung von Persistenz kann auf verschiedene Weisen erfolgen. Eine g?ngige Methode ist die Nutzung von Datenbanken. Hierbei werden Objekte und ihre Attribute in Datenbanktabellen gespeichert. Diese Methode erm?glicht eine strukturierte Speicherung und effiziente Abfrage von Daten.[4] Alternativ k?nnen Objekte in Dateien serialisiert und deserialisiert werden, um ihren Zustand zu erhalten. ORM (Object-Relational Mapping) Frameworks wie Hibernate in Java oder Entity Framework in .NET bieten Abstraktionen, die die Verwaltung von Persistenz erleichtern, indem sie Objekte automatisch mit Datenbanktabellen synchronisieren.[5]
Trotz der Vorteile, die Persistenz bietet, ergeben sich auch einige Herausforderungen bei der Implementierung. Die Datenintegrit?t und -konsistenz müssen gew?hrleistet sein, um inkonsistente Speicherung und Besch?digung von Daten zu verhindern. Transaktionskonzepte helfen dabei, diese Herausforderungen zu bew?ltigen, indem sie sicherstellen, dass Datenbankoperationen entweder vollst?ndig oder überhaupt nicht ausgeführt werden.[5]
Die Integration von Persistenz in objektorientierten Programmen bietet zahlreiche Vorteile. Sie erm?glicht die Wiederverwendung von Daten über verschiedene Sitzungen hinweg, was die Benutzerfreundlichkeit und Effizienz erh?ht. Zudem unterstützt sie die Schaffung von Anwendungen mit anhaltender Datenintegrit?t, was besonders in Bereichen wie Finanzwesen, Gesundheitswesen und E-Commerce von Bedeutung ist.[1]
Mit dem Fortschritt von Cloud-Computing und verteilten Systemen gewinnt die Persistenz in objektorientierten Programmen weiter an Bedeutung. Die M?glichkeit, Daten über verschiedene Ger?te und Standorte hinweg zu speichern und zu synchronisieren, er?ffnet neue M?glichkeiten für die Entwicklung vielf?ltiger Anwendungen.[5]
Persistenz in einer bestehenden Laufzeitumgebung
[Bearbeiten | Quelltext bearbeiten]In der Welt der objektorientierten Programmierung gibt es zwei grundlegende Ans?tze, um Persistenz zu implementieren: containerbasierte Persistenz und komponentenbasierte Persistenz. Diese Ans?tze definieren, wie Daten in einer Laufzeitumgebung gespeichert und wiederhergestellt werden.
Die containerbasierte Persistenz legt die Verantwortung des Speicherns und Wiederherstellens von Daten in die H?nde der Laufzeitumgebung, wie beispielsweise eines Anwendungsservers. Dies bedeutet, dass Entwickler sich weniger um die Details der Datenpersistenz kümmern müssen, da die Laufzeitumgebung die Aufgabe des Datenmanagements übernimmt.
Im Gegensatz dazu liegt bei der komponentenbasierten Persistenz die Verantwortung, Daten zu speichern und wiederherzustellen, direkt bei der einzelnen Komponente. Das bedeutet, dass die Programmierer für das Management der Daten selbst zust?ndig sind und die notwendigen Mechanismen implementieren müssen, um die Persistenz sicherzustellen.
In Java-Entwicklungsumgebungen, insbesondere ab der Java Platform, Enterprise Edition 5, werden für die containerbasierte Persistenz Enterprise JavaBeans (EJBs) verwendet. Diese Komponenten werden mit Annotations wie ?@Entity“ gekennzeichnet, um anzuzeigen, welche Klassen persistiert werden sollen.[6] Dies erm?glicht es, dass die Laufzeitumgebung die Speicherung und Wiederherstellung der Daten automatisch übernimmt.
Die Wahl zwischen containerbasierter und komponentenbasierter Persistenz h?ngt von den Anforderungen und der Komplexit?t des Projekts ab. W?hrend die containerbasierte Persistenz Entwicklern die Arbeit erleichtert, indem sie viele Details abstrahiert, bietet die komponentenbasierte Variante mehr Kontrolle und Flexibilit?t über den Persistenzprozess.
Weblinks
[Bearbeiten | Quelltext bearbeiten]Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ a b Dmitri Nesteruk: Design Patterns in Modern C++20: Reusable Approaches for Object-Oriented Software Design. Apress, Berkeley, CA 2022, ISBN 978-1-4842-7294-7, doi:10.1007/978-1-4842-7295-4 (springer.com [abgerufen am 11. August 2023]).
- ↑ Dhrubojyoti Kayal: Pro Java EE spring patterns: best practices and design strategies implementing Java EE patterns with the Spring Framework (= The expert's voice in Open Source). Apress, Berkeley, Calif 2008, ISBN 978-1-4302-1009-2.
- ↑ Sarah Beecham, Helen Sharp, Nathan Baddoo, Tracy Hall, Hugh Robinson: Does the XP environment meet the motivational needs of the software developer? An empirical study. In: Agile 2007 (AGILE 2007). August 2007, S. 37–49, doi:10.1109/AGILE.2007.22 (ieee.org [abgerufen am 11. August 2023]).
- ↑ Samuel A. Soares, Marcius Brandao, Mariela I. Cortes, Emmanuel S. S. Freire: Dribbling complexity in model driven development using Naked Objects, domain driven design, and software design patterns. IEEE, 2015, ISBN 978-1-4673-9143-6, S. 1–11, doi:10.1109/CLEI.2015.7360022 (ieee.org [abgerufen am 11. August 2023]).
- ↑ a b c Rick Cattell: Scalable SQL and NoSQL data stores. In: ACM SIGMOD Record. Band 39, Nr. 4, 6. Mai 2011, ISSN 0163-5808, S. 12–27, doi:10.1145/1978915.1978919 (acm.org [abgerufen am 11. August 2023]).
- ↑
Entity
(Java EE 5 API) bei Oracle (englisch)