2009-03-21 3 views
0

Я пишу .NET On-the-Fly компилятор для CLR-скриптов. И есть дилемма: лучше ли выкинуть исключение на сборку сбоя или нет?Ошибка компиляции: выбросить исключение или нет?

Итак, какова наилучшая точка зрения, какой подход более подходит?

try 
{ 
    compiler.Compile(); // do not throws an exception only if build succeed 
} 
catch(CompilerException ex) 
{ 
    string err = ex.Message; 
} 

или

compiler.Compile(); // throws an exception only in case of crash, etc 
if(!compiler.BuildSucceed) 
{ 
    string err = compiler.Output.ToString(); 
} 

ответ

5

Исключение должно быть использовано для исключительных условий. Я бы сказал, что неудавшаяся сборка не исключительная, поэтому вы должны иметь интерфейс вашего компилятора, возвращающий значение, указывающее на успех или неудачу (например, bool или enum), и предоставить интерфейс для возврата списка ошибок. Это может быть так же просто, как возвращать строку из всех объединенных вместе ошибок, или это может быть что-то вроде того, что вы передаете ему поток вывода заблаговременно, и он регистрирует каждую ошибку в этом потоке по мере их появления.

+0

Я согласен - неудачная сборка является вполне допустимым результатом для компилятора, а не сценария ошибок, и поэтому его следует обслуживать самим методом, а не через исключения. +1. – razlebe

Смежные вопросы