08/2008 - KaffeeKlatsch
08/2008 - KaffeeKlatsch
08/2008 - KaffeeKlatsch
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Umgemodelt<br />
import java.util.*;<br />
import javax.persistence.*;<br />
@Entity<br />
public class Kunde extends AbstractEntity {<br />
@OneToMany(mappedBy="kunde")<br />
private Collection adresseList =<br />
new ArrayList();<br />
private String name;<br />
@AttributeOverride(<br />
name="datum",<br />
column=@Column(name="geburtsdatum")<br />
)<br />
private Datum geburtsdatum;<br />
private Nation nationalitaet;<br />
// Getter und Setter …<br />
}<br />
import javax.persistence.*;<br />
@MappedSuperclass<br />
public class AbstractEntity {<br />
@Id<br />
@GeneratedValue<br />
private Long id;<br />
// Getter und Setter …<br />
}<br />
Listing 1: Entität „Kunde“ mit JPA<br />
CREATE TABLE KUNDE (<br />
ID BIGINT NOT NULL,<br />
NAME<br />
VARCHAR(255),<br />
GEBURTSDATUM DATE,<br />
NATIONALITAET_ID BIGINT<br />
);<br />
public class AufzaehlungsTyp extends AbstractEntity {<br />
private String bezeichnung; // Label; z. B. „Liefer-Adresse“<br />
// Getter und Setter …<br />
}<br />
import javax.persistence.Entity;<br />
@Entity<br />
public class AdresseArt extends AufzaehlungsTyp {<br />
}<br />
Listing 4: AufzählungsTyp „AdresseArt“ mit Superklasse<br />
Fachliche und technische Sicht<br />
Bemerkenswert ist bei dem JPA-Beispiel, dass das Diagramm<br />
gleichzeitig die fachliche Sicht und die technische<br />
Sicht darstellt. Fachabteilung und Entwickler<br />
können also mit demselben Diagramm arbeiten. Dies ist<br />
auch die Grundidee des Domain Driven Design (DDD).<br />
Dabei sollen Fachexperte und Entwickler eine gemeinsame<br />
fachliche Sprache (Ubiquitous Language) entwickeln.<br />
Dieses Ziel wird mit unserem JPA-Beispiel sehr<br />
gut unterstützt.<br />
Aufzählungstyp<br />
Attributes<br />
private String bezeichnung<br />
private String typ<br />
Listing 2: Generierte Datenbank-Tabelle<br />
Nation<br />
AdresseArt<br />
import java.util.Date;<br />
import javax.persistence.Embeddable;<br />
import javax.persistence.Temporal;<br />
import static javax.persistence.TemporalType.date;<br />
@Embeddable<br />
public class Datum {<br />
@Temporal(DATE) // Datenbanktyp „DATE“<br />
private Date datum;<br />
// …<br />
}<br />
Listing 3: selbstdefinierter Datentyp „Datum“<br />
import javax.persistence.*;<br />
import static javax.persistence.InheritanceType.*;<br />
@Entity<br />
@Inheritance(strategy=SINGLE_TABLE)<br />
@DiscriminatorColumn(<br />
name="typ",<br />
discriminatorType=DiscriminatorType.STRING<br />
)<br />
Abbildung 4: Aufzählungstypen „Nation“ und „AdresseArt“<br />
Eine häufige Kritik ist, dass die Fachlichkeit die primitiven<br />
Datentypen nicht verstehen kann. Sie möchten statt<br />
„int“, „double“, „String“, „boolean“ z. B. lieber „Ganzzahl“,<br />
„Kommazahl“, „Zeichenkette“ oder „JaNein“. Die einfachste<br />
Lösung dafür ist es, die primitiven Datentypen in<br />
eigenen Klassen zu kapseln. Man kann sie dann genauso<br />
verwenden, wie wir es mit der Klasse Datum getan haben<br />
(siehe Listing 3).<br />
Mit JPA bekommt man also einen sehr einfachen, eleganten<br />
und redundanzfreien Übergang vom Modell zum<br />
Code. Damit hat man schon sehr viel erreicht, denn das<br />
Entitätsdiagramm ist sicher das wichtigste Diagramm.<br />
Mit ihm bekommt man sehr schnell einen fachlichen<br />
Überblick über das System, da es die meisten fachlichen<br />
Begriffe darstellt.<br />
Seite 16 <strong>KaffeeKlatsch</strong> Jahrgang 1 / Nr. 8 / August 20<strong>08</strong>