如何将失败情况处理成一个简单的 Java 应用程序?

How to handle fail situation into a simple Java application?

我是一名 Java 开发人员,但我在软件架构方面还没有很多经验。

我有以下情况。我正在创建一个批处理应用程序(一个 运行 进入 shell 的命令行应用程序)所以它是从 main() 定义到 [=] 的方法开始的40=]主要() class.

在这个 main() 方法中,我创建了其他 classes 的一些对象实例来做一些事情(例如在数据库上执行查询,创建 PDF 等) ) 所以这里的应用程序可能会失败。

如果应用程序没有失败(一切按预期进行),main() 方法以 退出代码 = 0 结束.

我希望如果应用程序失败(在任何时候)返回的 退出代码是 -1

所以现在我不知道该如何处理这种情况。

例如,如果进入 main() 方法,我有这样的东西:

// Create DAO object:
FatturaDAO fatturaDAO = new FatturaDAO(conn);
listaFatture = fatturaDAO.getListaFatturePDF(partitaIVA);

我在其中创建并使用了一个 DAO 对象。现在考虑 FatturaDAO 对象发生故障的情况(例如连接丢失并抛出异常)。

如何正确处理这种情况?

我有 2 个想法,但我不知道什么是最好的解决方案:

  1. 我在我的代码中放置了一些 try catch 块,所以如果出现问题,它会进入处理它的 catch 块执行:

    System.exit(-1);
    
  2. 如果出现问题,它会进入 catch 块,而不是退出并抛出自定义异常,直到 main() 执行的方法:

    System.exit(-1);
    

或者我可以用其他更聪明的方式处理这些情况吗?

2. If something fail it enter into the catch block that instead of exit 
throws  a custom exception that goes back until the main() method that perform:

如果您在 main() 中处理异常,那么您必须在父级具有错误处理代码。如果有任何变化则无需检查其他函数,只需在其他函数上添加 through 关键字并在 main() 和 return 中处理所需类型的异常即可。

在大多数 J2EE 应用程序中,我们在 Controller 部分处理异常,而不是 DAOService 层。发生异常时更容易向用户传递消息。

在命令行应用程序中,main() 方法实际上是 UI 层。这是一个非常简单的框架 UI,但是,如果您构建应用程序以便主要 class 调用控制器层,并且控制器层抛出异常,您应该在main() 方法,以及 return 0 或 -1 的正确 "user value"。