假设我有一个服务类,它为我和消费者类做了一些消耗这项服务。该服务依赖于在向消费者提供不起作用的东西时向消费者抛出异常。
一切都很好,我可以很容易地从消费方面捕获这些例外,并对它们做一些有用的事情。就像向用户显示消息一样。
但是,如果服务遇到的问题不好,但实际上并不是错误。这可能是用户说“不要这样做,它会起作用,但你可能犯了一个错误”的一些信息。警告是。
您如何通知消费者类别此警告,以便例如向用户显示?是否是将某种警告服务(很像记录器)传递给服务的唯一方法,然后在服务完成后检查是否有任何警告?
我还应该说服务在我的域内,所以我可以用它做我想做的事。
答案 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);
}
}