Inhalt Abbildung PDF Source OO-Designkurs
 |<    <     >    >|  Generated by CoCoDiL

3.2 Pakete

Die Entscheidung welche Klassen in welche Pakete zusammengefasst werden ist nicht trivial. Im folgenden werden einige Aspekte bzw. Regeln zusammengefasst. Man wird allerdings nie alle Regeln gleichzeitig einhalten können.

3.2.1 Horizontale und Vertikale Paket Bildung

Oft habe ich eine horizontale Paket Bildung gesehen. Die Persistenzschicht, die Klassen mit dem Business Objekten und die Präsentationsschicht sind in eigenen Paketen. Wenn man die verschiedenen Schichten auf verschiedenen Servern laufen lassen möchte, ist dies auch sinnvoll. Ich sehe den Nachteil dass man meisten auch bei kleinen Änderungen in allen Schichten eingreifen muss. Ist z.B: die Anforderung einer Person das Attribut E-Mail Adresse hinzuzufuegen, wird meistens das Domain Objekt Person geändert, auf der Datenbank in der Tabelle eine entsprechende Spalte eingefuegt, und die E-Mail Adresse an der Oberfläche angezeigt.

Eine vertikale Paket Bildung ordnet die Klassen die fachlich zusammengehören in ein Paket. So wären die Oberflächen Elemente einer Person, die Datenbank Mapping Klassen, und das Domain Objekt im selben Paket. Dies hat die Vorteil dass sich eine Änderung wahrscheinlich nur in einem Paket auswirkt. Der Nachteil ist das diese Paketbildung es erschwert die Oberfläche bzw. die Datenbank auf einem eigenen Server auszulagern; oder vielleicht die Oberfläche bzw. Datenbank auszutauschen.

Eine Kombination von vertikale und horizontale Paketbildung kann zu einer Vielzahl von Paketen führen.

3.2.2 Kriterien die Pakete erfüllen sollen

Es gibt Metriken, die die Kohäsion und Kopplung messen, allerdings sind diese Berechnungen entweder kompliziert oder wenig brauchbar.

Schon etwas praktischer sind folgende Kriterien die eine Konstuktionseinheit (Paket) erfüllen soll, aus dem Objektorienterten Konstruktionshandbuch:

Offen-Geschlossen-Prinzip

Eine Entwurfs- oder Konstruktionseinheit ist offen, wenn sie weiterentwickelt werden kann.
Eine Entwurfs- oder Konstruktionseinheit ist geschlossen, wenn sie stabil von Klienten verwendet werden kann.

OO Konstruktionshandbuch Kapitel 2.1.9: Modularisierung

3.2.3 Prinzipien des Paket Designs

Robert C. Martin hat folgende Package Design Regeln veröffentlicht. Man wird allerdings wohl nie alle Prinzipien leichzeitig benutzen können.

The Release Reuse Equivalency Principle (REP)

Füge Klassen die gemeinsam benutzt werden, bzw. gemeinsam freigegeben werden in ein Paket

The Common Closure Principle CCP

Füge Klassen die gemeinsam für eine Sache verantwortlich sind in ein Paket

The Common Reuse Principle CRP

Trenne Klassen die von verschiedenen Klienten benutzt werden, in verschiedene Pakete.

The Acyclic Dependencies Principle ADP

Vermeide unbedingt Zyklen zwischen den Abhängigkeiten von Paketen. Für Java Programmierer hilft hier ein hervorragendes Open-Source Tool * JDepend dies zu vermeiden.

The Stable Dependencies Principle SDP

Wenn Paktet A von Paket B abhängig ist, dann sollte Paket B stabiler gegenüber Änderungen sein als Paket A. Das schon erwähnte Tool * JDepend benutzt Metriken um die Stabilität eines Pakets zu messen.

The Stable Abstractions Principle SAP

Ein Paket bei denen Änderungen aufwendig sind, sollte nicht von einem Paket abhängig sein, bei dem Änderungen sehr einfach möglich sind.

OO The Principles, Practices and Patterns of Agile Software Development

Inhalt Abbildung PDF Source OO-Designkurs
 |<    <     >    >|  Generated by CoCoDiL