当所有方法都以相同条件开始时怎么办
What to do when all methods start with the same condition
在 class 中,我所有的方法都以相同的 if
开头
if (locked)
return;
在这些情况下是否有可使用的设计模式?必须有比用 8 种方法编写相同的 2 行更好的方法。
我想到了一种方法,它使用 Functional Programming
其背后的想法之一是减少代码重复并重用函数式编程风格中的通用结构。
针对您的情况,我想出了以下扩展方法:
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);
我建议阅读 Functional Programming with C#。它很好地理解了函数式编程并提供了很好的示例。在本书的开头,他们用函数式方法替换了常规的 using() {} 结构。
希望这个回答能给您一些启发。
在 class 中,我所有的方法都以相同的 if
开头if (locked)
return;
在这些情况下是否有可使用的设计模式?必须有比用 8 种方法编写相同的 2 行更好的方法。
我想到了一种方法,它使用 Functional Programming
其背后的想法之一是减少代码重复并重用函数式编程风格中的通用结构。
针对您的情况,我想出了以下扩展方法:
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);
我建议阅读 Functional Programming with C#。它很好地理解了函数式编程并提供了很好的示例。在本书的开头,他们用函数式方法替换了常规的 using() {} 结构。
希望这个回答能给您一些启发。