在过去的几十年中,我看到了一些零星的例子,那就是slam阀门类型代码,其中有一个人为的值,这个值的递减/增量迫使一个循环在某个值被破坏后退出,或者一些迭代已经过了。
对你来说有点抽象?
一些具体的例子:
文件读取
在这种情况下,一个文件会在一夜之间在数据工厂中读取,因此需要在一定的时间内进行处理,以便系统在早上可用。注:文件是否完成并不重要。
int linesRead = 0;
const int SillyAmount = 1000000;
while (!EOF)
{
text = ReadLine();
// Do Some complicated processing with the text
linesRead++;
if (linesRead > SillyAmount)
break;
}服务会话
在本例中,通过服务调用逐步增强对象,直到数据足够好以便稍后处理。
int conversationLines = 10;
while (conversationLines > 0 && conversation.Status != Complete)
{
conversation.Next();
// Process conversation
conversationLines--;
}问题。
(1)这类东西是否有设计模式或类似的设计模式?
(2)在没有(1)的情况下,并且考虑到你人为地退出了一个循环,这是否可以被认为是一种代码气味?
发布于 2015-04-28 04:52:02
可以编写第一个示例:
int linesRead = 0;
const int SillyAmount = 1000000;
do {
text = ReadLine();
// text processing
} while (!EOF && ++linesRead <= SillyAmount);这看起来不再像黑客了(没有break)。这一次没有想到任何模式。
第二个问题需要更多的解释(需要一个更完整的例子来说明)。我们可以争辩说,会话对象可能应该设计为状态机 (也请参阅状态模式),并在内部处理会话,以防止这些代码在公开的情况下出现。要完成的实际处理可以作为(还原?)传递。函数,或者根据预先定义的会话类型使用某种战略模式实现。有很多方法来重新排列这个。我们需要一个更现实的例子,因为这个例子有点奇怪(会话中有迭代器(conversation.Next();),但是行数在外面.可以告诉它处理到一定数量的conversation.processUpTo(10);吗?)。
https://stackoverflow.com/questions/28875636
复制相似问题