You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
454 Въведение в програмирането със C#<br />
той не трябва да хвърля IndexOutOfRangeException, тъй като това<br />
изключение не е от бизнес областта на банковия сектор и олихвяването.<br />
Нормално е олихвяването в банковия софтуер да хвърли изключение<br />
InvalidInterestException с подходящо съобщение за грешка от бизнес<br />
областта на банките, за което би могло да бъде закачено (вложено)<br />
оригиналното изключение IndexOutOfRangeException.<br />
Представете си да сте си купили билет за автобус и пристигайки на<br />
автогарата омаслен монтьор ви обяснява, че ходовата част на автобуса има<br />
нужда от регулиране и кормилната рейка е нестабилна. Освен, ако не сте<br />
монтьор или специалист по автомобили, тази информация не ви помага с<br />
нищо. Нито става ясно колко ще се забави вашето пътуване, нито дали<br />
въобще ще пътувате. Вие очаквате, ако има проблем, да ви посрещне<br />
усмихната девойка от фирмата-превозвач и да ви обясни, че резервният<br />
автобус ще дойде след 10 минути и до тогава можете да изчакате на топло<br />
в кафенето.<br />
Същото е при програмирането – ако хвърляте изключения, които не са от<br />
бизнес областта на компонента или класа, който разработвате, има голям<br />
шанс да не ви разберат и грешката да не бъде обработена правилно.<br />
Можем да дадем още един пример: извикваме метод, който сортира масив<br />
с числа и той хвърля изключение TransactionAbortedException. Това е също<br />
толкова неадекватно съобщение, колкото и NullReferenceException при<br />
изпълнение на олихвяването в една банка. Веднага ще си помислите "Каква<br />
транзакция, какви пет лева? Нали сортираме масив!" и този въпрос е<br />
напълно адекватен. Затова се съобразявайте с нивото на абстракция, на<br />
което работи даденият метод, когато хвърляте изключение от него.<br />
Ако изключението има причинител, запазвайте го!<br />
Винаги, когато при прихващане на изключение хвърляте ново изключение<br />
от по-високо ниво на абстракция, закачайте за него оригиналното<br />
изключение. По този начин ползвателите на вашия код ще могат по-лесно<br />
да установят точната причина за грешката и точното място, където тя<br />
възниква в началния момент.<br />
Това правилo е частен случай на по-генералното правило:<br />
Всяко изключение трябва да носи в себе си максимално<br />
подробна информация за настъпилия проблем.<br />
От горното правило произтичат много други по-конкретни правила,<br />
например, че съобщението за грешка трябва да е адекватно, че типът<br />
на съобщението трябва да е адекватен на възникналия проблем, че<br />
изключението трябва да запазва причинителя си и т.н.