以定义的顺序调用多个方法

时间:2018-12-02 16:07:35

标签: c# .net design-patterns architecture

想象这样的情况:

我有一个控制器动作(或服务方法),需要连续调用三个方法,每个方法都有一个职责。

public return_type MyMethod(_params_) {
    // .. some code

    Method_1 (...);
    Method_2 (...);
    Method_3 (...);

    // ... some more code
}

开发人员可能会犯一个错误,即在Method_1之前调用Method_2,或者至少我们可以说没有什么可以强迫他遵循此顺序,或者在不遵循该顺序时得到异常。

现在我们可以在Method_1内调用Method_2,在Method_2内调用Method_3,但这在每种方法处理完全不同的职责时似乎并不正确。

是否存在针对这种情况的设计模式?或任何“干净”的方式来处理此问题?

2 个答案:

答案 0 :(得分:2)

这正是外观模式的作用。 尝试将这三个方法提取到另一个类,并将它们设置为私有。公开一个方法MyMethod,该方法以所需顺序调用其他方法。客户应使用Facade.MyMethod

更多详细信息:https://en.m.wikipedia.org/wiki/Facade_pattern

答案 1 :(得分:2)

我想您应该让执行控制权留给自己,并给出设置应执行的内容的可能性。

dart-vim-plugin

因此用法将是:

public interface IMethodsExecutor
{
    void Execute();
    void ShouldRunMethod1();
    void ShouldRunMethod2();
    void ShouldRunMethod3();
}

public class MethodsExecutor: IMethodsExecutor
{
    private bool _runMethod1;
    private bool _runMethod2;
    private bool _runMethod3;

    public MethodsExecutor()
    {
        _runMethod1 = false;
        _runMethod2 = false;
        _runMethod3 = false;
    }

    public void ShouldRunMethod1()
    {
        _runMethod1 = true;
    }
    public void ShouldRunMethod2()
    {
        _runMethod2 = true;
    }
    public void ShouldRunMethod3()
    {
        _runMethod3 = true;
    }

    private void Method1()
    {
    }
    private void Method2()
    {
    }
    private void Method3()
    {
    }
    public void Execute()
    {
        if (_runMethod1)
        {
            Method1();
        }
        if (_runMethod2)
        {
            Method2();
        }
        if (_runMethod3)
        {
            Method3();
        }
    }
}