访问者模式可以接受额外的参数吗

Gra*_*ant 5 c# design-patterns domain-driven-design visitor-pattern

在实现访问者模式时,向 Accept 和 Visit 方法添加额外的参数是不是一个坏主意?我从未见过任何这样做的例子,但也没有提到这是一个坏主意。

我想在我的域模型中使用此模式,但是需要附加参数以及实体本身。

例如——

public interface ISomethingVisitor
{
    void Visit(Foo foo, int p1, int p2);
}

public interface ISomethingVisitable
{
    void Accept(ISomethingVisitor visitor, int p1, int p2);
}
Run Code Online (Sandbox Code Playgroud)

wes*_*ton 3

我想说这是一个坏主意。对于该访问者来说可能效果很好,但是当另一个访问者需要更多/不同的参数时会发生什么?如果p1p2不更改,您可以在构建时将它们提供给访问者:

public class MyVisitor : ISomethingVisitor
{
    private int p1;
    private int p2;

    public MyVisitor(int p1, int p2)
    {
       _p1 = p1;
       _p2 = p2;
    }

    public void Visit(Foo foo)
    {
        //got access to _p1, _p2 here 
    }
}
Run Code Online (Sandbox Code Playgroud)