2015-06-10 76 views
0

我們有一個異常庫,預計可用於多種解決方案。我們有這個庫中包含的幾個自定義異常類型。排列消息時的異常消息最佳實踐

出現的問題:如果我們想要排列在這些例外中使用的錯誤消息,那麼完成此操作的最佳實踐方法是什麼?對於這個問題,假設解決方案中有3或4種方法想要拋出這些類型的異常。

讓我們舉個例子:

public class CustomException : Exception 
{ 
    // You can assume that we've covered the other default constructors for exceptions 

    public CustomException(string message) 
     : base(message) 
    { 
    } 
} 

我們想更換工作:

public void DoWork() 
{ 
    Guid id = Guid.NewGuid(); 

    // ... 

    throw new CustomException(string.Format("The guid was: {0}.", id)); 
} 

我們目前的想法
1 /定義接受一個GUID定義錯誤消息的新構造:

const string GuidMessageTemplate = "The guid was: {0}."; 

public CustomException(Guid id) 
    : base(string.format(GuidMessageTemplate, id)) 
{ 
} 

public void DoWork() 
{ 
    Guid id = Guid.NewGuid(); 

    // ... 

    throw new CustomException(id); 
} 

2允許每個解決方案def例外生成器類/方法實例化一致例外

public class ExceptionBuilder() 
{ 
    const string GuidMessageTemplate = "The guid was: {0}."; 

    public CustomException BuildCustomException(Guid id)  
    { 
     return new CustomException(string.format(GuidMessageTemplate, id)); 
    } 
} 

public void DoWork() 
{ 
    Guid id = Guid.NewGuid(); 

    // ... 

    var exception = BuildCustomException(id); 
    throw exception; 
} 

3 /另一種選擇?

回答

1

使用第一種方法。您的異常應該封裝構建錯誤消息。通過構造異常應收到來自外部的唯一方面的具體信息world.If你的異常可以通過構造得到充分的錯誤信息,那麼客戶端可以按如下方式創建你的異常的一個實例:

class InvalidEmailException : Exception 
{ 
    public InvalidEmailException(string message) : base(message) 
    {} 
} 

客戶端代碼:

void ClientMethod() 
{ 
    throw new InvalidEmailException(String.Format("GUID {0} is wrong", Guid.NewGuid())); 
} 

但是,等待,我期待電子郵件在這個例外!

有例外建設者

做法是在工程,只是使用第一種方法:)

+0

我們把這個解決方案,特別是與濫用異常的能力的說法。 –