При использовании кода с обработкой исключений программа становится гораздо читабельнее, что напрямую сказывается на снижении затрат на ее сопровождение. Причина такого улучшения — в синтаксисе обработки исключений по сравнению с обработкой кодов возврата. При использовании кодов возврата в методе
AccessDatabase.GenerateDatbase
потребовалась бы примерно такая обработка ошибок:
public bool GenerateDatabaseO {
if (CreatePhysicalDatabaseO) <
If (CreateTablesQ) {
if (CreatelndexesQ) {
return true; }
else {
// Обработка ошибки, return false; > }
else {
// Обработка ошибки, return false; } >
else {
// Обработка ошибки, return false; } >
Добавьте к этому коду еще несколько проверок, и у вас получится жуткая мешанина из кода, реализующего бизнес-логику, и проверок ошибок. Если вы делаете для каждого блока в коде отступ в 4 пробела, первый символ строки у вас может оказаться в 20-й позиции или еще дальше. Коду как таковому это не угрожает, но он становится трудным для чтения и сопровождения, а трудно сопровождаемый код — рассадник ошибок. Посмотрим, как тот же пример выглядит при использовании обработки исключений:
// Вызывающий код. '
try
{
AccessDatabase accessDb = new AccessDatabaseO;
accessDb.GenerateDatabaseO; >
catch(Exception e) {
// Анализируем уловленное исключение. }
// Определение метода AccessDatabase.GenerateOatabase. public void GenerateDatabaseQ {
CreatePhysicalDatabase();
CreateTablesO;
CreatelndexesO; }
Насколько понятней и элегантней второе решение! Это объясняется тем, что здесь обнаруживающий и устраняющий ошибки код не смешан с логикой самого вызывающего кода. Поскольку обработка исключений сделала этот код более простым, его сопровождение намного упростится.