Jestem w trakcie pisania biblioteki - ujednoliconego API - służącej do obsługi usług rozwiązywania captch. Nie muszę chyba nikogo przekonywać, że dobrze zaprojektowany system wyjątków to podstawa. Niestety nigdy się w to nie bawiłem, tzn. często używam wyjątków, ale nigdy nie próbowałem definiować własnych klas wyjątków. Przeczyłem ten artykuł: http://blogs.msdn.com/b/kcwalina/archive/2...ierarchies.aspx
Uznałem że zaproponowany tam podział na "usage exception" oraz "system exception" wydaje się rozsądny.
Moj kod wygląda następująco:
class Decaptcha_Exception extends Exception {} class Decaptcha_Exception extends Exception {} /* 99: unknown error */ class DecaptchaUsage_Exception extends Decaptcha_Exception {} /* 101: invalid login or password 102: captcha file not found / file empty 103: not logged in */ class DecaptchaSystem_Exception extends Decaptcha_Exception {} class DecaptchaSystemLogical_Exception extends DecaptchaSystem_Exception {} /* 201: unable to decode captcha (too hard or malformed image) 202: banned 203: insufficient funds 204: service overload 205: invalid response 206: connection failed/lost/timeout 207: network error */ class DecaptchaSystemFailure_Exception extends DecaptchaSystem_Exception {} /* 301: php extension not found 302: php function not found */
(przepraszam za tabulatory ale odzwierciedlają one hierarchę).
Pytanie: Co należałoby tu zmienić, czy np. "202: insufficient funds" pasuje bardziej do "SystemLogical_Exception" czy może "Usage_Exception". Czy to co zrobiłem ma jakikolwiek sens?
