在我们的Java代码库中,我不断看到以下模式: /** This is a stateless utility class that groups useful foo-related operations, often with side effects. */ public class FooUtil { public int foo(...) {...} public void bar(...) {...} } /** This class does applied foo-related things. */ class FooSomething { int DoBusinessWithFoo(FooUtil fooUtil, ...) { if (fooUtil.foo(...)) fooUtil.bar(...); …
我在工作中的遗留系统中看到了很多东西-这些功能如下所示: bool todo = false; if(cond1) { ... // lots of code here if(cond2) todo = true; ... // some other code here } if(todo) { ... } 换句话说,功能有两个部分。第一部分进行某种处理(可能包含循环,副作用等),并沿途设置“ todo”标志。仅当已设置“ todo”标志时才执行第二部分。 这似乎是一种非常丑陋的处理方式,而且我认为我花了很多时间去理解的大多数情况都可以重构,以避免使用该标志。但这是一个实际的反模式,一个坏主意还是完全可以接受? 第一个明显的重构是将其分为两种方法。但是,我的问题更多是关于是否有必要(在现代的OO语言中)创建一个局部标志变量,可能将其设置在多个位置,然后在以后使用它来决定是否执行下一个代码块。