Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 横切关注点测井_Design Patterns_Cross Cutting Concerns - Fatal编程技术网

Design patterns 横切关注点测井

Design patterns 横切关注点测井,design-patterns,cross-cutting-concerns,Design Patterns,Cross Cutting Concerns,我想记录有关正在执行的方法的特定信息,我考虑了AOP,这是可以的,制作了一个演示,但我确实需要记录关于每个方法的特定信息,将其视为与调用相关的附加信息 现在,我考虑的选项是在每个方法中记录它,但我认为这可能会污染代码,也许是最后的手段 或者我创建一个类,将方法映射到需要记录的信息,并使用AOP记录这些信息 你们怎么看?另一种方法可能是/但会增加编码工作量: interface IComponent { int Foo(int input); } class Component : IC

我想记录有关正在执行的方法的特定信息,我考虑了AOP,这是可以的,制作了一个演示,但我确实需要记录关于每个方法的特定信息,将其视为与调用相关的附加信息

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

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


你们怎么看?

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

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

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

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

关于每种方法的不同之处,你有具体的例子吗?