JavaBeans
Eine JavaBean ist eine Klasse, die den von Sun definierten JavaBeans-Konventionen folgt . Wikipedia hat eine ziemlich gute Zusammenfassung dessen, was JavaBeans sind:
JavaBeans sind wiederverwendbare Softwarekomponenten für Java, die in einem Builder-Tool visuell bearbeitet werden können. In der Praxis handelt es sich um Klassen, die in der Programmiersprache Java geschrieben sind und einer bestimmten Konvention entsprechen. Sie werden verwendet, um viele Objekte in ein einzelnes Objekt (die Bean) zu kapseln, sodass sie als einzelnes Bean-Objekt anstatt als mehrere einzelne Objekte weitergegeben werden können. Eine JavaBean ist ein Java-Objekt, das serialisierbar ist, einen Null-Konstruktor hat und den Zugriff auf Eigenschaften mithilfe von Getter- und Setter-Methoden ermöglicht.
Um als JavaBean-Klasse zu fungieren, muss eine Objektklasse bestimmte Konventionen bezüglich der Benennung, Konstruktion und des Verhaltens von Methoden befolgen. Diese Konventionen ermöglichen Tools, mit denen JavaBeans verwendet, wiederverwendet, ersetzt und verbunden werden können.
Die erforderlichen Konventionen sind:
- Die Klasse muss einen öffentlichen Standardkonstruktor haben. Dies ermöglicht eine einfache Instanziierung innerhalb von Bearbeitungs- und Aktivierungsframeworks.
- Auf die Klasseneigenschaften muss mit get, set und anderen Methoden (sogenannten Accessor-Methoden und Mutator-Methoden) gemäß einer Standard-Namenskonvention zugegriffen werden können. Dies ermöglicht eine einfache automatisierte Überprüfung und Aktualisierung des Bean-Status innerhalb von Frameworks, von denen viele benutzerdefinierte Editoren für verschiedene Arten von Eigenschaften enthalten.
- Die Klasse sollte serialisierbar sein. Auf diese Weise können Anwendungen und Frameworks den Status der Bean zuverlässig und unabhängig von der VM und der Plattform speichern, speichern und wiederherstellen.
Da diese Anforderungen größtenteils als Konventionen und nicht durch die Implementierung von Schnittstellen ausgedrückt werden, betrachten einige Entwickler JavaBeans als einfache alte Java-Objekte, die bestimmten Namenskonventionen folgen.
POJO
Ein einfaches altes Java-Objekt oder POJO ist ein Begriff, der ursprünglich eingeführt wurde, um ein einfaches, leichtes Java-Objekt zu bezeichnen, das keine javax.ejb
Schnittstelle implementiert , im Gegensatz zu schwerem EJB 2.x (insbesondere Entity Beans, Stateless Session Beans sind keine so schlechte IMO). Heutzutage wird der Begriff für jedes einfache Objekt ohne zusätzliches Material verwendet. Auch hier leistet Wikipedia gute Arbeit bei der Definition von POJO :
POJO ist eine Abkürzung für Plain Old Java Object. Der Name wird verwendet, um hervorzuheben, dass das betreffende Objekt ein gewöhnliches Java-Objekt ist, kein spezielles Objekt und insbesondere keine Enterprise-JavaBean (insbesondere vor EJB 3). Der Begriff wurde im September 2000 von Martin Fowler, Rebecca Parsons und Josh MacKenzie geprägt:
"Wir haben uns gefragt, warum die Leute so dagegen sind, normale Objekte in ihren Systemen zu verwenden, und sind zu dem Schluss gekommen, dass einfache Objekte keinen ausgefallenen Namen haben. Also haben wir ihnen einen gegeben, und er hat sich sehr gut durchgesetzt."
Der Begriff setzt das Muster älterer Begriffe für Technologien fort, die keine ausgefallenen neuen Funktionen verwenden, wie POTS (Plain Old Telephone Service) in der Telefonie und PODS (Plain Old Data Structures), die in C ++ definiert sind, aber nur C-Sprachfunktionen verwenden. und POD (Plain Old Documentation) in Perl.
Der Begriff hat höchstwahrscheinlich breite Akzeptanz gefunden, da ein allgemeiner und leicht verständlicher Begriff erforderlich ist, der im Gegensatz zu komplizierten Objektrahmen steht. Eine JavaBean ist ein POJO, das serialisierbar ist, einen Konstruktor ohne Argumente hat und den Zugriff auf Eigenschaften mithilfe von Getter- und Setter-Methoden ermöglicht. Eine Enterprise JavaBean ist keine einzelne Klasse, sondern ein gesamtes Komponentenmodell (EJB 3 reduziert wiederum die Komplexität von Enterprise JavaBeans).
Mit zunehmender Verbreitung von Designs mit POJOs sind Systeme entstanden, die POJOs einen Teil der in Frameworks verwendeten Funktionen und eine größere Auswahl darüber bieten, welche Funktionsbereiche tatsächlich benötigt werden. Winterschlaf und Frühling sind Beispiele.
Wertobjekt
Ein Wertobjekt oder VO ist ein Objekt java.lang.Integer
, das Werte enthält (daher Wertobjekte). Für eine formalere Definition verweise ich oft auf Martin Fowlers Beschreibung des Wertobjekts :
In Patterns of Enterprise Application Architecture habe ich Value Object als kleines Objekt beschrieben, z. B. als Money- oder Datumsbereichsobjekt. Ihre Schlüsseleigenschaft ist, dass sie eher der Wertesemantik als der Referenzsemantik folgen.
Sie können es ihnen normalerweise sagen, weil ihr Begriff der Gleichheit nicht auf Identität basiert, sondern zwei Wertobjekte gleich sind, wenn alle ihre Felder gleich sind. Obwohl alle Felder gleich sind, müssen Sie nicht alle Felder vergleichen, wenn eine Teilmenge eindeutig ist. Beispielsweise reichen Währungscodes für Währungsobjekte aus, um die Gleichheit zu testen.
Eine allgemeine Heuristik ist, dass Wertobjekte vollständig unveränderlich sein sollten. Wenn Sie ein Wertobjekt ändern möchten, sollten Sie das Objekt durch ein neues ersetzen und dürfen die Werte des Wertobjekts selbst nicht aktualisieren. Aktualisierbare Wertobjekte führen zu Aliasing-Problemen.
In der frühen J2EE-Literatur wurde der Begriff Wertobjekt verwendet, um einen anderen Begriff zu beschreiben, den ich als Datenübertragungsobjekt bezeichne . Sie haben seitdem ihre Verwendung geändert und verwenden stattdessen den Begriff Übertragungsobjekt .
Weitere gute Materialien zu Wertobjekten finden Sie im Wiki und bei Dirk Riehle .
Datenübertragungsobjekt
Data Transfer Object oder DTO ist ein (Anti) Muster, das mit EJB eingeführt wurde. Anstatt viele Fernaufrufe an EJBs durchzuführen, bestand die Idee darin, Daten in einem Wertobjekt zu kapseln, das über das Netzwerk übertragen werden kann: einem Datenübertragungsobjekt. Wikipedia hat eine anständige Definition von Datenübertragungsobjekt :
Das Datenübertragungsobjekt (DTO), früher als Wertobjekte oder VO bekannt, ist ein Entwurfsmuster, das zum Übertragen von Daten zwischen Softwareanwendungssubsystemen verwendet wird. DTOs werden häufig in Verbindung mit Datenzugriffsobjekten verwendet, um Daten aus einer Datenbank abzurufen.
Der Unterschied zwischen Datenübertragungsobjekten und Geschäftsobjekten oder Datenzugriffsobjekten besteht darin, dass ein DTO kein Verhalten außer dem Speichern und Abrufen seiner eigenen Daten (Zugriffsmethoden und Mutatoren) aufweist.
In einer traditionellen EJB-Architektur dienen DTOs zwei Zwecken: Erstens umgehen sie das Problem, dass Entity-Beans nicht serialisierbar sind. Zweitens definieren sie implizit eine Assemblyphase, in der alle von der Ansicht zu verwendenden Daten abgerufen und in die DTOs gemarshallt werden, bevor die Kontrolle an die Präsentationsebene zurückgegeben wird.
Für viele Menschen sind DTOs und VOs dasselbe (aber Fowler verwendet VOs, um etwas anderes zu bedeuten, wie wir gesehen haben). Meistens folgen sie den JavaBeans-Konventionen und sind daher auch JavaBeans. Und alle sind POJOs.