Guice Injection -> Aggregation oder Komposition

godi

Aktives Mitglied
Hallo!

Ich soll zu einer bestehende Software ein UML Klassendiagramm zeichnen.
In dieser Software wurde Google Guice verwendet. Da ich heute zum ersten mal mit dem ganzen (guice, MVC, DI,...) in Berührung gekommen bin, bin ich noch ein wenig überfordert. :bahnhof:

In dieser Software wird eine Klasse über den Konstruktor injiziert.
Java:
@Inject
    public STViewImpl (STContext context, STDocument document, STController controller,
        CalendarView calendarView, ExerciseListView exerciseListView, 
        NoteListView noteListView, WeightListView weightListView) {
        
        super (context.getSAFContext ().getApplication ());
        this.context = context;
        this.document = document;
        this.controller = controller;
        this.calendarView = calendarView;
        this.exerciseListView = exerciseListView;
        this.noteListView = noteListView;
        this.weightListView = weightListView;
    }

Jetzt bin ich mir nicht sicher ob die Assoziationen zu den anderen Klassen eben eine Komposition ist oder eine Aggregation.
Ich würde mal auf Komposition tippen da ja der Konstruktor die anderen Klassen braucht um seine zu erzeugen.

godi
 
G

Gelöschtes Mitglied 5909

Gast
In dieser Software wird eine Klasse über den Konstruktor injiziert.

Nein - Ich glaube du hast die Begriffe noch nicht so ganz verstanden. Die Parameter werden in den Konstruktor der Klasse injiziert.

Komposition oder Aggregation. Das kommt darauf an, ob du irgendeinen der Parameter auch außerhalb der STViewImpl verwenden kannst. Ich kenne zwar des Sachverhalt nicht, aber bei den beiden STContext STDocument könnte ich es mir auf jeden Fall vorstellen. Auch die anderen Views könnten seperat existieren, es sieht für mich so aus als ob das eine View aus verschiedenen Views ist. Das schließt aber nicht aus, dass die anderen Views nicht Standalone existieren können.
Ich tendiere zu Aggregation.

Wobei ich finde, dass Aggregation oder Komposition eher was für Korinthenkacker ist. Im zweifelsfall würde ich immer Aggregation nehmen
 

godi

Aktives Mitglied
Nein - Ich glaube du hast die Begriffe noch nicht so ganz verstanden. Die Parameter werden in den Konstruktor der Klasse injiziert.

Ja so durchsichtig ist das noch nicht für mich...

Also die GUI beinhaltet mehrere Ansichten. Zwischen denen kann umgeschalten werden. Da diese in der übergeordneten Ansicht implementiert sind glaube ich nicht das die alleine sein können.

Zu Korinthenkacker: Ist für die Uni :rolleyes: ;)

godi
 
M

maki

Gast
IMHO ganz klar Komposition, da STViewImpl ohne die Konstruktor Parameter nicht erzeugt bzw. exisieren kann.
 

godi

Aktives Mitglied
Ja so habe ich das auch vermutet.

Ich werde das mal als Komposition einzeichnen und nächste Woche mal mit den anderen abgleichen. ;)

Vielen Dank

godi
 

godi

Aktives Mitglied
Hallo!

So jetzt habe ich bei dem Projekt wieder mal weitergemacht.
Ich habe fast alles mit 1zu1 Assoziation jetzt gelöst.

Jetzt hab ich noch eine weitere Frage:
In dem Projekt sind einige Klassen bei denen der Konstruktor injiziert wird.
Die Formalparameter sind dann von einem "Interface Type". Injiziert wird dann ein Objekt, dass das Interface Implementiert.
Muss ich dann von der Klasse eine <<use>> Beziehung zum Interface machen oder eine Assoziation?

godi
 
M

maki

Gast
Eine use Beziehung ist eine Assoziation, genauso wie Aggregation und Komposition.
Komposition gibt semantisch am meisten her, Aggregation hat weniger Semantik und eine use Assoziation ist nicht viel mehr als eine einfache Assoziation als Abhängigkeit dargestellt.

Soll heissen: Jede Form der Assoziation wäre möglich, das können wir von hier aus schlecht entscheiden, du musst entscheiden was du darstellen willst.

Wenn du in einem stat. Klassendiagramm zeigen willst dass der Interface Typ teil des umschliessenden Typen (Typ in den er injiziert wird) ist, nimm Komposition, wenn du wirklich nur die Abhängigkeiten darstellen willst, zB. das der Interface Typ genutzt wird, nimm eine Assoziation, ggf mit <<use>> verfeinert etc.
 

Ähnliche Java Themen

Neue Themen


Oben