首页 > 解决方案 > 当所有方法都以相同的条件开始时该怎么办

问题描述

在一个类中,我所有的方法都以相同的if开头

if (locked)
    return;

在这些情况下是否可以使用设计模式?必须有比用 8 ​​种方法编写相同的 2 行更好的方法。

标签: design-patterns

解决方案


我想到了一种方法,它是使用函数式编程

它背后的想法之一是减少代码重复并以函数式编程风格重用通用结构。

在您的情况下,我提出了以下扩展方法:

private static void ExecuteOnFalse(this bool condition, Action actionToInvokeOnFalse)
{
    if (condition) return !condition;
    actionToInvokeOnFalse.Invoke();
    return !condition;
}

假设您要在检查后执行的主要代码是这样的:

public void DoSomething()
{
    // Doing something here
}

然后,您可以用以下代码替换您的代码:

locked.ExecuteOnFalse(DoSomething);

函数式编程的美妙之处在于链接您的方法。您可以对“ExecuteOnFalse”方法进行不同的修改,一个返回 bool 并接受 Func 作为主要操作。然后您可以链接该方法并以这种方式使用它:

locked.ExecuteOnFalse(DoSomething).ExecuteOnFalse(DoSomethingElse);

我建议阅读使用 C# 进行函数式编程。它很好地理解了函数式编程并带来了很好的例子。在本书的开头,他们用函数式方法替换了常规的 using() {} 结构。

希望这个答案能给你一些想法。


推荐阅读