我所维护的代码中有许多函数,它们可能会被描述为样板重。这里是一个与游标处理数据库I/O时,重复整个应用程序的广告恶心的样板模式:有没有更好的方法? While循环并继续
if(!RowValue(row, m_InferredTable->YearColumn(), m_InferredTable->YearName(), m_InferredTable->TableName(), value)
|| !IsValidValue(value))
{
GetNextRow(cursor, m_InferredTable);
continue;
}
else
{
value.ChangeType(VT_INT);
element.SetYear(value.intVal);
}
的事情是不是所有的这些陈述是这样处理整数的,这个“元素”的对象, “年”专栏等。我被要求比现在更凝结它,我想不出一种办法。我继续跳过继续声明和各个类的访问器。
编辑:感谢所有那些评论。这就是为什么我喜欢这个网站。这里是一个扩大视图:
while(row != NULL)
{
Element element;
value.ClearToZero();
if(!GetRowValue(row, m_InferredTable->DayColumn(), m_InferredTable->DayName(), m_InferredTable->TableName(), value)
|| !IsValidValue(value))
{
GetNextRow(cursor, m_InferredTable);
continue;
}
else
{
value.ChangeType(VT_INT);
element.SetDay(value.intVal);
}
而事情继续这样下去。并非所有取自“行”的值都是整数。 while循环中的最后一个子句是“GetNextRow”。
你能比后一个例子多的话,所以我们可以看到什么是固定的,哪些更容易改变? – tragomaskhalos 2009-11-11 15:02:16
我们需要看到更多的结构......这显然是一个循环中的一个子句,但是在一个循环中有多少个这样的子句?每个测试(如果)不同? – 2009-11-11 15:04:26
在目前的形式下,很难理解这个问题。为什么有一个“else”分支,如果真正的分支以“continue”结尾?周期内的if后面还有别的东西吗?该周期在哪里? – AnT 2009-11-11 15:07:20