07.11.2014 Aufrufe

08/2008 - KaffeeKlatsch

08/2008 - KaffeeKlatsch

08/2008 - KaffeeKlatsch

MEHR ANZEIGEN
WENIGER ANZEIGEN

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>

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!