从消费类中获取警告

时间:2011-05-06 14:17:19

标签: c# design-patterns

假设我有一个服务类,它为我和消费者类做了一些消耗这项服务。该服务依赖于在向消费者提供不起作用的东西时向消费者抛出异常。

一切都很好,我可以很容易地从消费方面捕获这些例外,并对它们做一些有用的事情。就像向用户显示消息一样。

但是,如果服务遇到的问题不好,但实际上并不是错误。这可能是用户说“不要这样做,它会起作用,但你可能犯了一个错误”的一些信息。警告是。

您如何通知消费者类别此警告,以便例如向用户显示?是否是将某种警告服务(很像记录器)传递给服务的唯一方法,然后在服务完成后检查是否有任何警告?

我还应该说服务在我的域内,所以我可以用它做我想做的事。

2 个答案:

答案 0 :(得分:1)

您是否考虑过您的消费者类投掷事件并让您的服务类订阅它们? See here

答案 1 :(得分:0)

我会考虑将整个服务调用包装到上下文中,如下所示:

class CallContext<TInput, TOutput>
{
    TInput InputValue { get; set; }

    TOutput OutputValue { get; set; }

    ICollection<String> Warnings { get; set; }
}

class MyService
{
    void SomeOperation(CallContext<int, int> context)
    {
        context.OutputValue = context.InputValue * 2;

        if (context.IntputValue < 0)
            context.Warnings.Add("Input value less than zero may have undesired results.");
    }
}

尽管服务已经认识到输入特有的东西,但服务仍然很乐意继续进行操作。它不会停止正在运行的功能,但服务能够警告调用者结果可能是意外的。

class Consumer
{
    void CallService()
    {
        var context = new Context<int, int>()
        {
            InputValue = -1;
        }

        myService.SomeOperation(context);

        Console.WriteLine(context.OutputValue);

        foreach(string warning in context.Warnings)
            Console.Writeline(warning);
    }
}