【问题标题】:Call multiple methods in a defined order以定义的顺序调用多个方法
【发布时间】:2018-12-04 17:59:19
【问题描述】:

想象这样一个案例:

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

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,但是当每个方法处理完全不同的职责时,这似乎并不正确。

这种情况有设计模式吗?或者任何“干净”的方式来处理这个?

【问题讨论】:

  • 这些方法有什么作用?如果呼叫者以错误的顺序呼叫他们会发生什么?
  • 您可以编写测试以确保正确的顺序并避免错误。如果命名正确,它们也会揭示意图。

标签: c# .net design-patterns architecture


【解决方案1】:

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

更多详情:https://en.m.wikipedia.org/wiki/Facade_pattern

【讨论】:

  • 如果他/她的开发人员可以访问该代码,他们仍然可能会搞砸。
【解决方案2】:

我想你应该把执行的控制权留给自己,并提供可能只是设置应该执行的内容。

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

这样的用法就是:

IMethodsExecutor methodsExecutor = new MethodsExecutor();
methodsExecutor.ShouldRunMethod1();
methodsExecutor.ShouldRunMethod3();
methodsExecutor.Execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多