Start: Seite 361
Wie erfülle ich die 5 Grundprinzipien / Wie modelliere ich „gut“?
Regel 1: Sparsames Einsetzen von Vererbung
- Viele Vererbungen lassen sich mit Assoziationen umgehen
- Vererbung nur bei echter “ist ein” Beziehung verwenden
- Wenn man Vererbungen verwendet, dann möglichst nur Einfachvererbungen
- Vererbungen nicht zu tief verschachteln
Regel 2: Normalisiere das Datenmodell
- 1. Normalform:
- Jedes Attribut der Relation muss einen atomaren Wertebereich haben
- 2. Normalform:
- jedes Nichtschlüsselattribut ist von jedem Schlüsselkandidaten voll funktional abhängig
- 3. Normalform:
- kein Nichtschlüssel hängt von irgendeinem Schlüsselkandidaten transitiv ab
- Normalisiere das Datenmodell: Mindestens 3. NF
Regel 3: Vermeide transitive Assoziationen
- Durch Zyklen gibt es mehrere Wege für eine Beziehung zwischen zwei Objekten
- Man sollte versuchen solche Zyklen durch das entfernen von bestimmten Assoziationen aufzulösen
- Wenn das Auflösen eines Zyklus‘ nicht möglich ist, müssen Widersprüche mithilfe von Constrains verhindert werden
Regel 4: Analysiere m:n-Beziehungen genau
Beispiel: Lösung:
- m:n-Beziehungen werfen oft Probleme auf
- diese Beziehungen können jedoch meistens durch Assoziationsklassen dargestellt werden
- Probleme können dadurch behoben werden
- n:m Beziehungen werden durch eine Assoziationsklasse ersetzt, die zu den verbundenen Klassen mit 1:* Multiplizität verbunden ist.
Weitere Regeln
- Vermeide 1:1-Beziehungen
- Oft kann man sich diese Assoziation sparen und beide Entitäten zu einer zusammenfassen
- Es werden nie technische Aspekte modelliert
- Beschränkung bei der Modellierung auf die wirklichen Anforderungen
Entwurf von Operationen und Schnittstellen
Regel 1: Operationen sind unabhängig von der verwendeten Technologie !
- Versuche, möglichst wenig über die interne Funktionalität / Umsetzung einer Operation zu verraten
- nichts über die Datenspeicherung, Datenstrukturen, die das System verwendet sichtbar machen
- z.B. Stack
- SAP
- …
- nichts über die Datenspeicherung, Datenstrukturen, die das System verwendet sichtbar machen
- Entwerfe Operationen so,
- dass die Funktionalität intuitiv erkennbar sind
- dass sie eigenständig funktionieren
- so sind sie austauschbar
- sie können gegebenenfalls für andere Systeme verwendet werden
Regel 2: Gib keine Referenzen nach außen!
- Versuche keine Pointer zu übergeben
- Pointer sind nur innerhalb dieses Systems gültig
- Pointer verraten Weiteres über die Funktionalität
- Referenzen erhöhen die Abhängigkeit zwischen Systemteilen
- Gefahr von Fehlern erhöht
- Ausnahme: Werden viele Daten benötigt, kann diese Regeln übergangen werden, da die Funktionalität ansonsten sehr umständlich wird
Regel 3: Normalisiere die Schnittstelle !
- Entwerfe eine Schnittstelle so, dass es nichtmehrere Möglichkeiten gibt, die gleiche Funktionalität umzusetzen
- Redundanz wird verhindert
- Benenne die Schnittstelle so, dass ihre Funktionalität offensichtlich ist
- Wartbarkeit wird verbessert
- Unterscheide schreibende und lesende Methoden
Regel 4: Mache die Operationen grobgranular !
- bietet mit einer Operation die Funktionalität, die der Aufrufer erwartet und braucht
- verbirgt vor dem Aufrufer die Komplexität, die in der Umsetzung einer Funktionalität durch atomare Operationen und Befehle steckt
Regel 5: Mache die Operationen idempotent !
- Auch wenn der Aufruf (versehentlich) mehrfach erfolgt, wird das gleiche Ergebnis geliefert
- Beugt Gefahr von unerwarteten Ergebnissen vor
- Zuverlässigkeit wird gefördert
Regel 6: Mache die Operationen kontextfrei !
- besorgt sich selbst die erforderliche Kontext-Information
- Aufruf wird einfacher
- viele Probleme werden im Vorfeld verhindert