gpt4 book ai didi

java - 多步骤过程有多种可能的错误-与外部类分开分别调用每个步骤,或者只有一个方法?

转载 作者:行者123 更新时间:2023-12-03 08:51:08 24 4
gpt4 key购买 nike

我是新手,我想知道在以下情况下的最佳做法:

我使用MVC模式。我的Controller类需要调用Model类来执行过程。此过程包含4个步骤。在最初的3个步骤中,如果出现问题,模型将生成一个字符串列表, Controller 必须确保该字符串列表显示给用户,同时还显示一条错误消息。在最后一步,模型将生成一个 map , Controller 必须再次确保将其显示给用户。在最后一步中,也会发生超时。

处理此问题的最佳方法是什么?

我在下面提出了两个建议的草稿。

选择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
}

我对此不满意的是,它使Controller可能忘记执行某个步骤或以错误的顺序执行这些步骤。

选择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字段来改进它(因为每种异常类型都应描述执行中的特定条件):

public class ModelException extends Exception{}

public class Step1ModelException extends ModelException{
public Step1ModelException(List<String> details) {...}
public List<String> getDetail(){...}
}

public class Step2ModelException extends ModelException{
public Step2ModelException(List<String> details) {...}
public List<String> getDetail(){...}
}

public class Step3ModelException extends ModelException{
public Step3ModelException(Map<String,String> details) {...}
public Map<String,String> getDetail(){...}
}

关于java - 多步骤过程有多种可能的错误-与外部类分开分别调用每个步骤,或者只有一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40485753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com