CreateDocument(string templatePath)
{
    Document doc = OpenDocument(templatePath);
    Picture pic = GetLogo();
    AddLogo(doc, pic, templatePath);
}

AddLogo(Document doc, Picture logo, string templatePath)
{
    Picture placeholder = doc.FindLogoPlaceholder();
    if (placeholder.Size != logo.Size)
    {
        throw new ApplicationException(
            String.Format("Invalid template {0}, logo size: {1}, required: {2}",
                 templatePath, placeholder.Size, logo.Size
            ));
    }
}


考虑上面的代码作为我刚刚组成的示例。

注意,将templatePath传递到AddLogo方法的唯一原因是为了促进异常的产生。

今天我的代码中有一些需要执行此操作的内容,感觉对我来说真是一种令人讨厌的代码气味。但是我对异常处理模式不太熟悉,而且我真的看不到任何更好的方法。

我想知道您的想法是什么,以及是否有更好的模式来应对这种情况。

最佳答案

在更高级别上创建异常:

CreateDocument(string templatePath)
{
    Document doc = OpenDocument(templatePath);
    Picture pic = GetLogo();
    try {
        AddLogo(doc, pic);
    } catch (InvalidLogoSize e) {
        throw new ApplicationException(
            String.Format("Invalid template {0}, logo size: {1}, required: {2}",
                 templatePath, e.pSize, e.lSize
            ));
    }
}

AddLogo(Document doc, Picture logo)
{
    Picture placeholder = doc.FindLogoPlaceholder();
    if (placeholder.Size != logo.Size)
    {
        throw new InvalidLogoSizeException(placeholder.Size, logo.Size);
    }
}

关于c# - 仅将参数用于内部功能中的异常报告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4193826/

10-17 01:11