Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Med koden i klassene over, så må en altså selv sørge for konsistens, dvs. at hvis r11 er koblet til r21 og r22 gjennom rolle2, så er r21 og r22 koblet til r11 gjennom rolle1. Det er bedre om dette skjer automatisk, så en er sikret konsistens. Merk at dette bare gjelder når assosiasjonen er to-veis, noe den ikke alltid er.

Det skal altså være nok å kalle add- eller set-metoden for å sette opp begge koblingene (evt. koble begge av med null som argumentmed removeRolleX). add- metoden og remove-metodene må derfor sjekke koblingen den andre veien, også. Dette kan være litt fiklete å gjøre rett, så her er koden for add-metoden for Rolle1Klasse, som vil være tilsvarende for Rolle2Klasse:

Code Block
// i Rolle1Klasse

public void addRolle2(Rolle2Klasse rolle2) {
	// sjekk om koblingen er riktig allerede
	if (this.roller2.contains(rolle2)) {
		return;
	}
	this.roller2.add(rolle2);
	// opprett koblingen tilbake, om nødvendig
	if (! rolle2.hasRolle1(this)) {
		rolle2.addRolle1(this);
	}
}

public void removeRolle2(Rolle2Klasse rolle2) {
	// sjekk om koblingen er riktig allerede
	if (! this.roller2.contains(rolle2)) {
		return;
	}
	this.roller2.remove(rolle2);
	// fjern koblingen tilbake, om nødvendig
	if (rolle2.hasRolle1(this)) {
		rolle2.removeRolle1(this);
	}
}

 

 

...