我正在开发一个连接到 MySQL 数据库的 GWT 程序。让我先说我对这方面的研究还很深入,我不知道 struts、hibernate 或类似的东西。我的数据库调用变得很大,我想将其更改为更好的做法。事情似乎变得扑朔迷离了。
在我的 databaseServiceImpl
类中,我有一系列方法,每个方法做一件事(添加客户、删除客户、添加产品、添加订单等),这意味着我现在有 50 多个方法,全部有些相似但不同的结果或使用的对象。
这是此类中的一个方法示例
@Override
public int addClient(Client client) throws DatabaseException {
Connection con = connect();
PreparedStatement ps = null;
ResultSet rs = null;
int clientID = 0;
// insert client into client table
try {
String query = "INSERT INTO clients (clientID, name, description, notes, address, contactName, contactNumber) VALUES (" + "NULL,'"
+ client.getClientName() + "','" + client.getDescription() + "','" + client.getNotes() + "','" + client.getAddress() + "','"
+ client.getContactName() + "','" + client.getContactNumber() + "')";
ps = con.prepareStatement(query);
System.out.println("addClient: " + ps.toString());
clientID = ps.executeUpdate(query, ps.RETURN_GENERATED_KEYS);
con.commit();
System.out.println("Transactions are being committed.");
while (rs.next()) {
clientID = rs.getInt(1);
}
} catch (SQLException e) {
try {
con.rollback();
System.out.println("Transactions are being rolled back.");
} catch (SQLException e1) {
e1.printStackTrace();
}
throw new DatabaseException(e);
} finally {
close(rs, ps, con);
}
return clientID;
}
好吧,也许这不会太糟糕,但每次我从数据服务调用一个方法(即使是一些小的东西)我最终都需要这个,
Ioma.dataservice.addClient(name.getText(), desc.getText(), notes.getText(), address.getText(), contactName.getText(),
phone.getText(), new AsyncCallback<Integer>() {
@Override
public void onFailure(Throwable caught) {
new GuiErrorDialog("Add Client", caught);
}
@Override
public void onSuccess(Integer result) {
Window.alert("Client " + name.getText() + " added");
}
});
对于简单的查询和结果,这对我来说似乎太过分了。我知道 GWT 中的数据库调用是异步调用,但我忍不住觉得我遵循的是不正确或糟糕的编码实践。我该怎么做才能让它变得更好?
最佳答案
这取决于您的需求 - 查询失败的频率/概率有多大?如果它失败了,你(或用户)能做些什么吗?也许一个通用的错误消息就足够了?用户不必知道它是第 x 行的 *Exception - 足以说明发生了意想不到的事情。您(开发人员/维护人员)应该监视日志并对错误做出相应的 react 。您应该注意客户端(验证输入等),以便服务器端不会发生错误 - 除非发生爆炸,当然 :)
至于让代码不那么臃肿——当然可以做很多事情。对于查询,我不能推荐足够的jOOQ .开源版本支持 MySQL,并且通过 jooq 在 SO 上提供了出色的支持。标签。 jOOQ 允许使用 Java 编写类型安全的查询 - 您可以轻松地重用部分查询等。不再将查询编写为字符串!
对于客户端回调 - 你可以创建一个 AsyncCallback
的子类,它有 onFailure
实现了一些通用消息(消息可以是回调的构造函数参数,如果它每个回调必须不同)。
如果您正在做很多 CRUD操作,也许 RequestFactory会更合适吗?
关于java - 我的数据库类太大/编码很差,我怎样才能让它变得更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27806105/