Сквозное ведение журнала проблем

Я хочу регистрировать определенную информацию о выполняемых методах, я считал, что с АОП все в порядке, и сделал демонстрацию, но мне действительно нужно регистрировать конкретную информацию о каждом методе, думайте об этом как о дополнительной информации, связанной с вызовом.

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

Или я создаю класс, который сопоставляет методы с информацией, которую необходимо регистрировать, и использую АОП для регистрации этой информации.

Что вы ребята думаете?


person user1555190    schedule 08.07.2015    source источник
comment
У вас есть конкретный пример того, что будет отличаться в каждом методе?   -  person plalx    schedule 09.07.2015


Ответы (2)


Альтернативным подходом может быть шаблон декоратора/Шаблон перехватчика, но требует дополнительных усилий по написанию кода:

interface IComponent
{
    int Foo(int input);
}

class Component : IComponent
{
    public int Foo(int input)
    {
        return input * 2;
    }
}

class LoggingComponent: IComponent
{
    private readonly IComponent target;

    public LoggingComponent(IComponent target)
    {
        this.target = target;
    }

    public int Foo(int input)
    {
        // ToDo: Add logging before method call

        int returnValue = this.target.Foo(input);

        // ToDo: Add logging after method call

        return returnValue;
    }
}

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

person Oliver    schedule 09.07.2015

Вы также можете подумать об использовании шаблона окружающего контекста для реализации сквозных задач. Об этом есть хороший блог: Ambient Context.

person Tapio Reisinger    schedule 09.07.2015