我所維護的代碼中有許多函數,它們可能會被描述爲樣板重。這裏是一個與遊標處理數據庫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