Ich schreibe eine API, die einige Core Foundation Web-Funktionalität, die eine Reihe von möglichen Fehlerbedingungen zurückgeben kann umhüllt. Ich kämpfe mit der Entscheidung über den besten Weg, um Fehlerbedingungen zu behandeln, die der API-Konsument behandeln sollte (wie Netzwerk-Timeouts, unerwartete Ergebnisse, fehlerhaftes XML usw.). Ich habe mir 3 verschiedene Modelle ausgedacht, bin mir aber nicht sicher, welches Modell ich verwenden soll:
Gegeben ein Objekt mit einer Methode takeAction
die keinen Wert zurückgibt, sollte ich einen Fehler in der Methode behandeln, indem:
-
die Methode zu schreiben
- (BOOL)takeAction:(NSError **)error
so dass der Verbraucher weiß, dass die Methode erfolgreich war oder fehlgeschlagen ist, und das Fehlerobjekt untersuchen kann, um festzustellen, warum, -
die Methode zu schreiben
- (BOOL)takeAction
so dass der Verbraucher wiederum weiß, ob die Methode erfolgreich war oder nicht, und dann- (NSError *)getLastError
um festzustellen, warum die Methode fehlgeschlagen ist, oder -
schreiben Sie es als
- (void)takeAction
und eine Benachrichtigung senden, damit der Verbraucher die Benachrichtigung abonnieren und das NSError-Objekt im userInfo-Wörterbuch der Benachrichtigung übergeben kann?
Was ist vorzuziehen?