我有一個服務器接收請求,我必須解析以獲取請求處理程序使用的參數。此外,解析和請求處理程序都可能以某種方式失敗(例如:對於解析器,缺少參數;對於請求處理程序:數據庫中存在一些錯誤),因此下面代碼中的「狀態」。請求處理程序當然會給出某種迴應,然後我必須發回給客戶端。從函數返回多個值和狀態/錯誤
所以我無法決定哪下列選項我應該在「主」使用,因爲我想保持從處理器中分離解析器:
1)
parser.parse(request,¶m1, ¶m2, &status)
handler.handle(param1, param2, &response, &status)
2)
status = parser.parse(request, ¶m1, ¶m2)
status = handler.handle(param1, param2, &response)
3)
Params params = parser.parse(request, &status)
handler.handle(params, &response, &status)
4)
status = parser.parse(request, ¶ms)
status = handler.handle(params, &response)
5)
parser.parse(request, ¶ms, &status)
response = handler.handle(params, &status)
6)等,其他的一些組合
(PARAMS將某種對於不同參數的容器,所以爲每種類型的請求我會有一個不同的「參數」類型。此外,「&」可能意味着指針或參考,我使用的是C++,但它與問題無關)
哪一個是最簡單,最清晰,最好,......,不管?
***有很多類似的問題,但沒有包括「狀態」的一部分,所以我不能讓我的腦海裏又
事情是,錯誤不一定是例外。例如,如果用戶想用錯誤的密碼登錄,我不會說這是一個「例外」。這裏的響應將是一個令牌,如果密碼錯誤,則返回空令牌似乎不太確定。 – Chrischpo
如果用戶嘗試使用錯誤的密碼登錄,那肯定是一個例外,它應該解析爲401/403 http狀態。密碼檢查功能不會返回null。它會拋出一個異常(不返回任何內容)。你知道例外是如何工作的嗎?如果函數拋出一個異常,它不會返回'null'。它不返回任何內容,並且代碼執行流程跳轉到'catch'塊。 – djxak
是的,我知道異常是如何工作的。我只是不認爲一個錯誤的密碼是一個例外,因爲它不是例外,用戶輸入一個錯誤的密碼是很常見的。所以我的意思是,在你的代碼中,沒有辦法確定是否出錯,但沒有拋出異常。 – Chrischpo