Teil 1: Modellierung und Produktkonfiguration

Aufnahme von Produktaspekten ins Modell

Nun beschäftigen wir uns damit, wie Produktaspekte im Modell abgebildet werden. Bevor wir dies mit Faktor-IPS tun, diskutieren wir das Design auf Modellebene.

Schauen wir uns die bisher definierten Attribute unserer Klasse „HausratVertrag“ an und überlegen, was in einem Produkt konfigurierbar sein soll:

Table 1. Eigenschaften der Klasse „HausratVertrag“
Eigenschaften von HausratVertrag Konfigurationsmöglichkeiten

zahlweise

Die im Vertrag erlaubten Zahlweisen.
Der Vorgabewert für die Zahlweise bei Erzeugung eines neuen Vertrags.

wohnflaeche

Bereich (min, max), in dem die Wohnfläche liegen muss.

vorschlagVersSumme

Vorgeschlagener Wert für einen Quadratmeter Wohnfläche. Der Vorschlag für die komplette Versicherungssumme ergibt sich dann durch Multiplikation mit der Wohnfläche [9].

versSumme

Bereich, in dem die Versicherungssumme liegen muss.

9 Alternativ könnten wir auch die Formel zur Berechnung des Vorschlags konfigurierbar machen. Zunächst beschränken wir uns aber auf den Vorschlag für den Quadratmeterwert.

Wir wollen zwei Hausratprodukte erstellen. „HR-Optimal“ soll einen umfangreichen Versicherungsschutz gewähren während „HR-Kompakt“ einen Basisschutz zu einem günstigen Beitrag bietet. Die folgende Tabelle zeigt die Eigenschaften der beiden Produkte bzgl. der oben aufgeführten Konfigurationsmöglichkeiten:

Konfigurationsmöglichkeit HR-Kompakt HR-Optimal

Vorgabewert Zahlweise

jährlich

jährlich

Erlaubte Zahlweisen

halbjährlich, jährlich

monatlich, vierteljährlich, halbjährlich, jährlich

Erlaubte Wohnfläche

0-1000 qm

0-2000 qm

Vorschlag Versicherungssumme pro qm Wohnfläche

600 Euro

900 Euro

Versicherungssumme

10 Tsd - 2 Mio Euro

10 Tsd - 5 Mio Euro

Wir bilden dies im Modell ab, indem wir eine Klasse „HausratProdukt“ einführen. Das Produkt enthält die Eigenschaften und Konfigurationsmöglichkeiten, die bei allen Hausratverträgen, die auf dem gleichen Produkt basieren, identisch sind. Die beiden Produkte „HR-Optimal“ und „HR-Kompakt“ sind Instanzen der Klasse „HausratProdukt“. Das folgende UML Diagramm zeigt das Modell:

hausratmodell produktklassen
Figure 1. Hausratmodell mit Produktklassen

Erweitern wir unser Modell in Faktor-IPS um die Produktklassen. Als erstes definieren wir die Klasse „HausratProdukt“. Zum Erzeugen klicken Sie in der Toolbar auf den Button NewProductCmptTypeWizard . In dem Wizard geben Sie den Namen der neuen Klasse an („HausratProdukt“) und geben Sie im Feld Policy Component Type (Vertragsteiltyp) an, welche Klasse konfiguiert wird, in diesem Fall also „HausratVertrag“, danach den Button Finish drücken.

Es öffnet sich der Editor zur Bearbeitung von Produktklassen.

116hausratprodukt attribute
Figure 2. Editor für Produktklassen

Im Abschnitt Allgemeine Informationen sehen wir die gerade im Wizard eingegebene Information, dass die Klasse „HausratProdukt“ die Klasse „HausratVertrag“ konfiguriert. Ansonsten ist der Aufbau der ersten Seite des Editors analog zum Editor für Vertragsklassen [10].

10 Sie können in den Preferences einstellen, ob Sie alle Informationen zu einer Klasse auf einer Seite oder auf zwei Seiten dargestellt bekommen möchten.

Gleichzeitig hat Faktor-IPS nun die Implementierungsklasse „HausratProdukt“ generiert.

Folgende Aspekte sollen in der Klasse „HausratProdukt“ konfigurierbar sein:

  • der Name des Produktes

  • die erlaubten Zahlweisen und der Vorbelegungswert für die Zahlweise.

Beginnen wir mit dem Produktnamen. Hierzu legen Sie ein neues Attribut produktname vom Datentyp String an. Dies geschieht analog zum Anlegen eines Attributes für Vertragsklassen. Die folgende Abbildung zeigt den entsprechenden Dialog:

117hausratvertrag
Figure 3. Dialog zum Editieren von Produktattributen

Nun konfigurieren wir die in einem Hausratvertrag erlaubten Zahlungsweisen und den Vorgabewert für die Zahlweise im Produkt. Hierzu öffnen wir zunächst den Editor für die Klasse „HausratVertrag“. In den Abschnitt Allgemeine Informationen hat der Wizard eingetragen, dass die Klasse „HausratVertrag“ durch die Klasse „HausratProdukt“ konfiguriert wird.

118vertrag mit produkt
Figure 4. General Information Abschnitt im Editor für die Klasse Vertrag

Entsprechend ist der Vertragsteiltyp als konfigurierbar eingestellt. Öffnen Sie das Attribut zahlweise im Bereich Attribute. Im Dialogfenster unter dem Bereich Konfiguration können Sie dieses Attribut editieren.

119zahlweise attribut
Figure 5. Dialog für ein Vertragsklassenattribut mit Konfigurationsmöglichkeit

Um die erlaubten Zahlweisen und den Vorgabewert für die Zahlweisen im Produkt definieren zu können, müssen Sie die entsprechende Checkbox anhaken. Button OK drücken und anschließend Änderungen speichern.

Werfen wir nun einen Blick in den Sourcecode. In der Klasse „HausratProdukt“ gibt es jeweils eine Methode, um den Produktnamen, den Vorgabewert für die Zahlweise und die erlaubten Werte für die Zahlweise abzufragen.

/**
 * Gibt den Wert der Eigenschaft produktname zurueck.
 *
 * @generated
 */
@IpsAttribute(name = "produktname", kind = AttributeKind.CONSTANT, valueSetKind = ValueSetKind.AllValues)
public String getProduktname() {
	return produktname;
}

/**
 * Gibt den Defaultwert fuer die Eigenschaft zahlweise zurueck.
 *
 * @generated
 */
@IpsDefaultValue("zahlweise")
public Integer getDefaultValueZahlweise() {
	return defaultValueZahlweise;
}

/**
 * Gibt den erlaubten Wertebereich fuer das Attribut zahlweise zurueck.
 *
 * @generated
 */
@IpsAllowedValues("zahlweise")
public OrderedValueSet<Integer> getAllowedValuesForZahlweise(IValidationContext context) {
	return allowedValuesForZahlweise;
}

In der Klasse „HausratVertrag“ gibt es Methoden, um auf das „HausratProdukt“ zuzugreifen.

/**
 * Gibt HausratProdukt zurueck, welches HausratVertrag konfiguriert.
 *
 * @generated
 */
public HausratProdukt getHausratProdukt() {
	return (HausratProdukt) getProductComponent();
}

/**
 * Setzt neuen HausratProdukt.
 *
 * @param hausratProdukt
 *            Der neue HausratProdukt.
 * @param initPropertiesWithConfiguratedDefaults
 *            <code>true</code> falls die Eigenschaften mit den Defaultwerten aus
 *            HausratProdukt belegt werden sollen.
 *
 * @generated
 */
public void setHausratProdukt(HausratProdukt hausratProdukt, boolean initPropertiesWithConfiguratedDefaults) {
	setProductComponent(hausratProdukt);
	if (initPropertiesWithConfiguratedDefaults) {
		initialize();
	}
}

Markieren Sie abschließend noch die Attribute wohnflaeche und versSumme analog zur zahlweise als konfigurierbar.

Nun überarbeiten wir die Berechnung des Vorschlags der Versicherungssumme. Im Kapitel „Erweiterung des Hausratmodells“ hatten wir die Methode getVorschlagVersSumme() der Klasse „HausratVertrag“ bisher wie folgt implementiert:

/**
 * Gibt den Wert des Attributs vorschlagversSumme zurueck.
 *
 * @restrainedmodifiable
 */
@IpsAttribute(name = "vorschlagversSumme", kind = AttributeKind.DERIVED_ON_THE_FLY, valueSetKind = ValueSetKind.AllValues)
public Money getVorschlagversSumme() {
    // begin-user-code
    // TODO: Der Multiplikator wird spaeter aus den Produktdaten ermittelt.
    return Money.euro(650).multiply(wohnflaeche);
    // end-user-code
}

Nun wollen wir die Höhe des Multiplikators im Hausratprodukt konfigurieren können. Hierzu legen Sie zunächst an der Klasse „HausratProdukt“ ein neues Attribut vorschlagVersSummeProQm vom Datentyp Money an. Dies ist der Vorschlagswert für einen Quadratmeter Wohnfläche. Nach dem Speichern der Klasse HausratProdukt hat Faktor -IPS an der Klasse „HausratProdukt“ die entsprechende Gettermethode getVorschlagVersSummeProQm() generiert. Diese nutzen wir nun in der Berechnung des Vorschlags für die Versicherungssumme. Passen Sie den Sourcecode in der Klasse „HausratVertrag“ dazu wie folgt an:

/**
 * Gibt den Wert des Attributs vorschlagversSumme zurueck.
 *
 * @restrainedmodifiable
 */
@IpsAttribute(name = "vorschlagversSumme", kind = AttributeKind.DERIVED_ON_THE_FLY, valueSetKind = ValueSetKind.AllValues)
public Money getVorschlagversSumme() {
	// begin-user-code
    HausratProdukt prod = getHausratProdukt();
    if (prod == null) {
        return Money.NULL;
    }
    return prod.getVorschlagVersSummeProQm().multiply(wohnflaeche);
    // end-user-code
}

Definieren wir nun noch die Produktseite des Modells für die Grunddeckung. Dazu markieren wir die Klasse „HausratGrunddeckung“ als Konfigurierbar. Die neu anzulegende Produktbausteinklasse nennen wir „HausratGrunddeckungstyp“. Wir definieren zunächst nur ein Attribut bezeichnung mit Datentyp String an dieser Klasse.

120grunddeckung
Figure 6. Konfiguration der HausratGrunddeckung

Zum Abschluss dieses Kapitels beschäftigen wir uns noch mit den Beziehungen zwischen den Klassen der Produktseite. Wir wollen hierüber abbilden, welche (Hausrat-)Deckungstypen in welchen (Hausrat-)Produkten enthalten sind. Das folgende UML Diagramm zeigt das Modell:

modell produktkonfigurationsklassen
Figure 7. Modell der Produktkonfigurationsklassen

Das Hausratprodukt verwendet genau einen Grunddeckungstyp und beliebig viele Zusatzdeckungstypen. Andersherum kann ein Grunddeckungstyp bzw. ein Zusatzdeckungstyp in beliebig vielen Hausratprodukten verwendet werden. Die primäre Navigation ist immer vom Hausratprodukt zum Grund- bzw. Zusatzdeckungstyp, nicht umgekehrt, da ein Deckungstyp immer unabhängig von den Produkten sein sollte, die ihn verwenden.

Definieren wir die Beziehung zwischen „HausratProdukt“ und „HausratGrunddeckungstyp“ also nun in Faktor-IPS. Öffnen Sie hierzu zunächst den Editor für die Klasse „HausratProdukt“ und legen im Bereich Beziehungen durch klicken auf New eine neue Beziehung an. Es öffnet sich der folgende Dialog, in den Sie die Daten wie hier abgebildet eintragen. Achten Sie darauf die maximale Kardinalität auf eins zu setzen. Den Zusatzdeckungstypen legen wir im Teil 2 des Tutorials an.

121grunddeckungstypen beziehung
Figure 8. Dialog für Beziehungen zwischen Produktklassen