首页
学习
活动
专区
圈层
工具
发布

Slam阀型
EN

Stack Overflow用户
提问于 2015-03-05 10:30:46
回答 1查看 88关注 0票数 2

在过去的几十年中,我看到了一些零星的例子,那就是slam阀门类型代码,其中有一个人为的值,这个值的递减/增量迫使一个循环在某个值被破坏后退出,或者一些迭代已经过了。

对你来说有点抽象?

一些具体的例子:

文件读取

在这种情况下,一个文件会在一夜之间在数据工厂中读取,因此需要在一定的时间内进行处理,以便系统在早上可用。注:文件是否完成并不重要。

代码语言:javascript
复制
int linesRead = 0;

const int SillyAmount = 1000000;

while (!EOF)
{
    text = ReadLine();
    // Do Some complicated processing with the text
    linesRead++;

    if (linesRead > SillyAmount)
        break;
}

服务会话

在本例中,通过服务调用逐步增强对象,直到数据足够好以便稍后处理。

代码语言:javascript
复制
int conversationLines = 10;

while (conversationLines > 0 && conversation.Status != Complete)
{
    conversation.Next();
    // Process conversation
    conversationLines--;    
}

问题。

(1)这类东西是否有设计模式或类似的设计模式?

(2)在没有(1)的情况下,并且考虑到你人为地退出了一个循环,这是否可以被认为是一种代码气味?

EN

回答 1

Stack Overflow用户

发布于 2015-04-28 04:52:02

可以编写第一个示例:

代码语言:javascript
复制
int linesRead = 0;
const int SillyAmount = 1000000;

do {
  text = ReadLine();
  // text processing
} while (!EOF && ++linesRead <= SillyAmount);

这看起来不再像黑客了(没有break)。这一次没有想到任何模式。

第二个问题需要更多的解释(需要一个更完整的例子来说明)。我们可以争辩说,会话对象可能应该设计为状态机 (也请参阅状态模式),并在内部处理会话,以防止这些代码在公开的情况下出现。要完成的实际处理可以作为(还原?)传递。函数,或者根据预先定义的会话类型使用某种战略模式实现。有很多方法来重新排列这个。我们需要一个更现实的例子,因为这个例子有点奇怪(会话中有迭代器(conversation.Next();),但是行数在外面.可以告诉它处理到一定数量的conversation.processUpTo(10);吗?)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28875636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档