我有一個函數需要分析數據包後決定要做什麼。 對於每個數據包代碼必須:構建這類代碼的最佳方式是什麼?
- 讀取數據包,超時返回錯誤代碼。
- 檢查是否存在腐敗,如果是正面記錄並且轉到1.
- 檢查中止數據包,如果是正面記錄並返回並中止代碼。
- 檢查數據包參數的非法性,如果是正數登錄,則返回一個無效的參數數據包並轉至1.
- 運行數據包的操作,如果失敗記錄,則使用故障數據包進行響應,轉到1.
- 如果數據包是結束數據包,則返回成功。
我的代碼如下所示:
Packet p;
for (;;) {
int ret = receive(&p, time);
if (ret == TIMEOUT) {
log("timeout");
return TIMEOUT;
}
if (ret != 0) {
log("corrupted %d", ret);
continue;
}
if (p.type == ABORT) {
log("abort");
return ABORT;
}
ret = check(&p);
if (ret != 0) {
log("invalid %d", ret);
respond(&p, INVALID);
continue;
}
ret = execute(&p);
if (ret != 0) {
log("failure %d", ret);
respond(&p, FAILURE);
continue;
}
if (is_last(&p)) {
finalize(&p);
return 0;
}
}
是否有這個代碼是沒有必要的嵌套或長期更好的結構化的方式?
這絕對是個人選擇,但你對我看起來不錯! – Nick 2011-05-05 07:47:42
通常,構建代碼的最佳方式是以最簡單的方式維護。不要選擇一種對你沒有意義的模式,只是因爲有人告訴你它更好。 – tylerl 2011-06-05 05:42:59