Ex 01 : Refactoring

Evgeni
Windoof-User
Windoof-User
Beiträge: 39
Registriert: 1. Dez 2004 19:22

Ex 01 : Refactoring

Beitrag von Evgeni »

Hallo


in der Liste auf der http://www.refactoring.com ist u.A. folgende Empfehlung zu finden:
Replace Error Code with Exception . Um diese umzusetzen müsste man dann aber an der Klasse TestGeneratePrimes was ändern - dürfen wir das?

z.B.

Code: Alles auswählen

	public static int[] generatePrimes(final int maxValue){
			throws PrimeNumbersException {
		if (maxValue < 2)
			throw new PrimeNumbersException();

                //falls alles OK machen wir weiter
	}

Oder geht das schon über die Aufgabenstellung hinaus?

jlerch
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 148
Registriert: 18. Okt 2005 14:45

Beitrag von jlerch »

Wäre eine IllegalArgumentException nicht angebrachter?

Die würde auch nicht erfordern das du die Signatur der Methode ändern must.

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Beitrag von marcel_b »

Die Änderung von TestGeneratePrimes ist ok - sogar gewünscht (Erweiterung der Testfälle).

Die Änderung der Schnittstelle von GeneratePrimes ist auch möglich. Jedoch würde ich den Änderungsgrund kritisch hinterfagen.

Die Fowler-Methode liefert als Rückgabewert nur einen Status-Wert zurück. Der Statuswert gibt Aufschluss darüber, ob die Operation erfolgreich war oder nicht. D.h. jeder Entwickler muss hier den Rückgabewert überprüfen und ggf. eine Fehlerbehandlung starten.

Fowler geht von einem fehlerfreien Programmablauf aus und will diese (häufig vergessenen) Fehlerabfragen verhindern/eliminieren. Dafür macht er den Fehlerzustand explizit durch eine Exception.

Konkret ein solches Problem gibt es im Apache HTTPClient. Hier wird durch ein true oder false Flag angezeigt, ob die Put/Get-Operation geklappt hat oder nicht. Es muss also manuell jedes Mal überprüft werden, ob ein Fehlerzustand vorliegt. Zusätzlich werden noch diverse IOExceptions geworfen. Entwickler, die neu in der API sind, können hier Fehler machen indem sie nur die Exceptions abfangen und den Returnwert nicht überprüfen...


In deinem Fall gibst du ein Ergebnis zurück, das keinem Status entspricht (-1, 0-1 usw.) sondern konkrete Primzahlen. Insofern trifft das Fowler-Beispiel und das Refactoring meiner Meinung nach hier nicht zu. Aber grundsätzlich ist es vernünftig in Erwägung ziehen, ob man eine Exception werfen möchte. In diesem Fall gibt es Leitlinien wann man eine RuntimeException und wann eine "BusinessException" geworfen werden sollte. Aber hier scheiden sich gelegentlich auch die Geister... Wer mehr zu dem Thema lesen will, findet hier einen gute Startdokumentation und Diskussion:

http://java.sun.com/docs/books/tutorial ... index.html

Antworten

Zurück zu „Archiv“