Получить предупреждение из класса потребления - PullRequest
0 голосов
/ 06 мая 2011

Допустим, у меня есть класс обслуживания, который что-то делает для меня, и потребительский класс, который потребляет эту услугу.Сервис полагается на выдачу исключений потребителю, когда он передает ему что-то, что не будет работать.

Все хорошо, я могу легко поймать эти исключения со стороны потребителя и сделать с ними что-то полезное.Как отображение сообщения для пользователя.

Однако, что если служба столкнется с чем-то плохим, но на самом деле это не ошибка.Это может быть некоторая информация для пользователя, говорящая: «Не делай так, это сработает, но ты, вероятно, ошибся».Предупреждение.

Как бы вы уведомили потребительский класс об этом предупреждении, чтобы оно, например, могло быть показано пользователю?Является ли единственный способ передать какую-либо службу предупреждений (например, регистратор) службе и затем проверить, нет ли каких-либо предупреждений после ее создания?

Я также должен сказать, что служба находится в моем домене.так что я могу делать с ней все, что хочу.

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Задумывались ли вы о событиях, связанных с выбрасыванием класса потребителей, и подписались ли на них ваши классы обслуживания? Смотрите здесь

0 голосов
/ 06 мая 2011

Я бы подумал об упаковке всего вызова службы в контекст, что-то вроде этого:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...