2012-04-20 2 views
0

В книге руководства по дизайну Framework есть глава об исключении, и они рассказывают о сообщениях об ошибках на основе возвращаемых значений и об ошибках, основанных на ошибках, и о том, что мы на языке OO, например C#, должны избегать отчетов об ошибках на основе возвращаемых значений и исключений использования. Имея это в виду, я смотрел на наш код, который восемь лет назад был написан на Visual Basic и в прошлом году с автоматическим инструментом, преобразованным в C#!uplifitng Возвращаемое значение error error to Except

Итак, вот метод, на который я смотрю, мне было интересно, относится ли к этой методике рекомендация этой книги, и если да, то каков был бы лучший подход для переписывания этого метода?

public int Update(CaseStep oCaseStepIn) 
{ 
    int result = 0; 
    //Update the master object with the passed in object 

    result = UCommonIndep.gnUPDATE_FAILED; 
    if (Validate(oCaseStepIn) == UCommonIndep.gnVALIDATE_FAILED) 
    { 
     return result; 
    } 

    CaseStep oCaseStep = get_ItemByObjectKey(oCaseStepIn.CopyOfObjectKey); 
    if (oCaseStep == null) 
    { 
     return result; 
    } 

    return result; 
} 

ответ

1

Выбросить конкретные исключения, если возможно. Тогда вам не нужно возвращать значение в этом случае.

public void Update(CaseStep oCaseStepIn) 
{ 
    //Update the master object with the passed in object 
    if (Validate(oCaseStepIn) == UCommonIndep.gnVALIDATE_FAILED) 
     throw new ValidationFailedUpdateException(); 

    CaseStep oCaseStep = get_ItemByObjectKey(oCaseStepIn.CopyOfObjectKey); 
    if (oCaseStep == null) 
     throw new KeyObjectNotFoundUpdateException(); 

    if (oCaseStep.Update(oCaseStepIn) != UCommonIndep.gnUPDATE_SUCCESSFUL) 
     throw new UpdateFailedException(); 

    //******************************* 
    //FYI - Insert code here to update any Key values that might have changed. 
} 
  • UpdateFailedException расширяет Exception
  • ValidationFailedUpdateException расширяет UpdateFailedException
  • KeyObjectNotFoundUpdateException расширяет UpdateFailedException
0

Есть (по крайней мере), столько и мнений по обработке исключений, как есть кодеры, но хорошие эмпирическое правило для начала состоит в том, что исключения должны быть исключены в исключительных обстоятельствах.

Так что это ошибка обновления, исключительная ситуация?