0
新手在這裏..我想知道什麼是在以下情況下的最佳做法:有多種錯誤可能性的多步驟程序 - 分別從外部類別調用每個步驟,或者有一種方法?
我使用MVC模式。我的控制器類需要調用Model-class來執行一個過程。這個程序有4個步驟。在前三個步驟中,如果出現問題,模型將生成一個字符串列表,控制器必須確保向用戶顯示,以及錯誤消息。在最後一步中,模型將生成一個Map,控制器必須確保向用戶顯示。在最後一步,也可能發生超時。
處理這個問題的最佳方法是什麼?
我在下面提出了兩個粗略的建議草案。
選擇1:
public class Model{
public List<String> step1(){
// return empty list if ok, fill list otherwise
}
public List<String> step2(){ // return empty list if ok, fill list otherwise}
public Map<String, String> step3(){ // return empty list if ok, fill list otherwise}
}
public class Controller{
Model myMOdel;
public void doProcedure(){
List<String> list = myModel.step1();
if(list.size() != 0){
String errormessage = "Step 1 error message"
// make sure View display list and errormessage
return;
}
list = myModel.step2();
if(list.size() != 0){
String errormessage = "Step 2 error message"
// make sure View display list and errormessage
return;
}
Map<String, String> map = myModel.step3();
if(map.size()!=0){
String errormessage = "Step 3 error message"
// make sure View display map and errormessage
return;
}
// make View display "procedure ok" message to user
}
,它開闢了可能性控制器去忘掉一個步驟,或做錯誤的順序步驟是什麼,我不喜歡這個。
備選方案2:
public class Model {
final static int STEP1_ERROR;
final static int STEP2_ERROR;
final static int STEP3_ERROR;
private void step1() throws ModelException{
List<String> list;
if(somethingwentwrong){
throw new ModelException(STEP1_ERROR, "errormessage for step1", list)
}
}
private void step2() throws ModelException {.
List<String> list;
if(somethingwentwrong){
throw new ModelException(STEP2_ERROR, "errormessage for step2", list)
}
}
private void step3() throws ModelException{.
Map<String, string> map;
if(somethingwentwrong){
throw new ModelException(STEP3_ERROR, "errormessage for step3", map)
}
}
public void procedure() throws ModelException{
step1();
step2();
step3();
}
}
public class Controller{
Model myModel;
try{
model.procedure();
}
catch(ModelException e){
switch(e.getErrorNum){
case // handle error type 1
case // handle error type 2 etc
}
}
}
public class ModelException extends Exception{
List<String> list;
Map<String, String> map;
int errorNum;
public ModelException(int errorNum, String message, List<String>){
....
}
public ModelException(int errorNum, String message, Map<String><String>){
....
}
}
感謝:但你甚至可以通過適當的層次異常更換ERRORNUM場(因爲每種類型的異常應說明在執行特定條件)完善它。我也喜歡2最好的。我沒有考慮過我可以製作這樣的子類。會嘗試 :) – Bugle