想象这样的情况:
我有一个控制器动作(或服务方法),需要连续调用三个方法,每个方法都有一个职责。
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,但这在每种方法处理完全不同的职责时似乎并不正确。
是否存在针对这种情况的设计模式?或任何“干净”的方式来处理此问题?
答案 0 :(得分:2)
这正是外观模式的作用。 尝试将这三个方法提取到另一个类,并将它们设置为私有。公开一个方法MyMethod,该方法以所需顺序调用其他方法。客户应使用Facade.MyMethod
答案 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();
}
}
}