设计模式——横切关注点日志



我想记录关于正在执行的方法的某些信息,我认为AOP是好的,敲出了一个演示,但是我真的需要记录关于每个方法的特定信息,把它看作是与调用相关的附加信息。

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

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

你们觉得怎么样?

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

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

使用这种方法需要为所有你想记录方法调用和输入/返回值的目标实现大量的日志类。此外,你不能记录装饰器/拦截器转发给目标的方法内部发生的事情。

您还可以考虑使用Ambient Context Pattern来实现横切关注点。有一个很好的博客:Ambient Context.

相关内容

  • 没有找到相关文章

最新更新