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:
Eigenschaften von HausratVertrag | Konfigurationsmöglichkeiten |
---|---|
|
Die im Vertrag erlaubten Zahlweisen. |
|
Bereich (min, max), in dem die Wohnfläche liegen muss. |
|
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]. |
|
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:
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 . 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.
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:
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.
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.
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)
@IpsGenerated
public String getProduktname() {
return produktname;
}
/**
* Gibt den Defaultwert fuer die Eigenschaft zahlweise zurueck.
*
* @generated
*/
@IpsDefaultValue("zahlweise")
@IpsGenerated
public Integer getDefaultValueZahlweise() {
return defaultValueZahlweise;
}
/**
* Gibt den erlaubten Wertebereich fuer das Attribut zahlweise zurueck.
*
* @generated
*/
@IpsAllowedValues("zahlweise")
@IpsGenerated
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
*/
@IpsGenerated
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
*/
@IpsGenerated
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)
@IpsGenerated
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)
@IpsGenerated
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.
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:
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.