横切关注记录

时间:2015-07-08 21:52:54

标签: design-patterns cross-cutting-concerns

我想记录有关正在执行的方法的某些信息,我认为AOP没问题,敲了一个演示,但我真的需要记录每个方法的具体信息,把它当作与呼叫相关的附加信息。

现在我考虑的选项只是在每个方法中记录它,但我认为它会污染代码,最后的手段,也许

或者我创建了一个将方法映射到需要记录的信息的类,并使用AOP记录此信息。

你们有什么想法?

2 个答案:

答案 0 :(得分:0)

另一种方法可能是Decorator pattern / Interceptor pattern,但会增加编码工作量:

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;
    }
}

使用此方法需要为要记录方法调用和输入/返回值的所有目标实现许多日志记录类。另外,你无法记录装饰器/拦截器转发到目标的方法内部发生的事情。

答案 1 :(得分:0)

您还可以考虑使用环境上下文模式来实现横切关注点。有一个很好的博客:Ambient Context