我有一個函數,從數據庫中加載一個事物列表,並將它們放入選擇列表中。該函數如下: (僞碼)這是太多行和嵌套塊太多嗎?
protected function Foo()
{
try {
get pdo instance
prepare statement
if (pdo query executes)
{
while (row = fetched rows)
{
do stuff with row
}
}
}
catch (PDOException $ex)
{
do error stuff here
}
}
NetBeans的給出了一個代碼提示,是太多行和太多的嵌套塊。我個人覺得這個功能應該可以接受。我也覺得把邏輯分解成更小的函數有點麻煩,但爲什麼netbeans會騙我:)?
所以我的問題如下:
這是不好的邏輯還是我好繼續前進? 我很樂意就如何重新設計符合NetBean約束的函數提供任何建議。
編輯:
我不會回答我的問題,但在這種情況下,是不是需要一個嵌套塊。從具有try/catch塊的單例類中檢索pdo。我不需要在這個函數中再次重複它,因爲這個例外已經被捕獲了。
編輯2:
卸下try catch塊簡直就像拆了東牆補西牆。因此,如果在創建pdo實例時拋出異常,它不會停止執行。因此,我們嘗試在未正確初始化的PDO對象上調用prepare語句。這迫使我們在準備調用之前進行另一個測試,因此只返回原始函數的返工。
根據我的經驗,這意味着沿着這條線我的邏輯地板的某處。如果我有什麼值得說的話,我會回顧我的設計和霍拉。
再次感謝所有
真相被告知,它是4行,實際執行5級深度代碼的行動,但不應該太糟糕。只要嘗試寫更多的代碼行,它應該消失(或禁用Netbeans中的功能)。 –
邏輯看起來不錯。通常作爲一種模式,您可能想要使用自己的try/catch/error報告體系結構將PDO實例的設置抽象到它自己的類中。然後,您可以只抓取生成的PDO實例的類級指針,並假設其餘代碼中不需要將所有內容都包含在try/catch中,而只需檢查查詢是否執行。遍歷行很好,雖然(不知道什麼語言)可能有一個fetchAll類型的函數,它會將它轉儲爲一個整潔的小數組。 – joshstrike
謝謝你們,我想了很多!我在單例類和try catch塊中都有PDO實例。爲什麼我進入數組的時間是每個結果被放入另一個對象,例如 - myObject-> InsertChild(row);如果你得到我的漂移。感謝Erik和Josh的指導 – Shibby