目前我正在使用 Playframework2 开发网站。我只是编程的初学者。我读了一些关于异常的书,但现在在现实世界中,异常处理真的很奇怪。
老实说,我真的不在乎抛出什么异常,我以相同的方式处理所有异常。
返回 badrequest();
。我只使用异常记录。
try{
...
}
catch(Exeption e){
//log
return badrequest();
}
但这是太多的样板文件,写起来真的很烦人,因为每个方法都会抛出相同的异常。
有什么提示、提示或资源可以给我吗?
编辑:
一个例子是我的“全局”配置文件。因为每次我认为我可以为这个问题写一个单例时,我都需要连接到数据库。
private Datastore connect() throws UnknownHostException, MongoException,
DbAuthException {
Mongo m = new Mongo(dbUrl, dbPort);
Datastore ds = new Morphia().createDatastore(m, dbName);
boolean con = ds.getDB().authenticate(username, password.toCharArray());
if (!con)
throw new DbAuthException();
return ds;
}
每次我想连接到数据库时,这也会导致 try and catch。我的问题是我认为我无法自信地处理它们。
代码示例:
public static Result addComment(String title) {
try {
Datastore ds = DatabaseConnect.getInstance().getDatastore();
Form<Comment> filledForm = commentForm.bindFromRequest();
Comment userComment = filledForm.get();
userComment.setUsername(Util.getUsernameFromSession(ctx()));
User.increasePointsBy(ctx(), 1);
UserGuides.addComment(title, userComment);
} catch (Exception e) {
return badRequest();
}
return redirect(routes.Guides.blank());
}
在这种情况下,我懒得一遍又一遍地编写相同的 try 和 catch,这是重复的代码。
也许有一本书解释了如何设计带有异常处理的大型应用程序?
最佳答案
当您调用一个方法时,您不一定非要立即捕获异常。您可以让调用者处理它们(如果是已检查的异常,则声明一个 throws 子句)。事实上,无需任何额外工作即可将它们传递给调用者的能力是异常的显着特征。
我的团队采用了以下编码标准:当我们想要从故障中恢复时,我们会为那些罕见的情况抛出检查异常,而对于其他任何情况则抛出未经检查的异常。在调用堆栈中如此之高以至于所有请求都通过它(例如在 ServletFilter
中)的方法中,只有一个 catch block 用于未经检查的异常。此 catch block 记录异常,并将用户转发到“抱歉,这不应该发生”页面。
关于java - Java 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994691/