java - 我的数据库类太大/编码很差,我怎样才能让它变得更好?

标签 java mysql gwt

我正在开发一个连接到 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,并且通过 在 SO 上提供了出色的支持。标签。 jOOQ 允许使用 Java 编写类型安全的查询 - 您可以轻松地重用部分查询等。不再将查询编写为字符串!

对于客户端回调 - 你可以创建一个 AsyncCallback 的子类,它有 onFailure 实现了一些通用消息(消息可以是回调的构造函数参数,如果它每个回调必须不同)。

如果您正在做很多 CRUD操作,也许 RequestFactory会更合适吗?

关于java - 我的数据库类太大/编码很差,我怎样才能让它变得更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27806105/

相关文章:

css - 如何使用 Client Bundle 将 CSS 应用于对话框?

java - 如何证明类 ListHelper<E> 不是线程安全的

java - 如何放置 jar 文件并使用 FileInputStream 读取它

mysql - 在发送 HTTP 响应之前捕获 mysql 错误

php - 将 MySQL 变量与 PDO Select 语句一起使用

html - GWT 无法在固定位置的 SimplePanel 上滚动

java - Maven 和 CXF : abstractMethodError (getConduit) with web service

java - 如何从另一个类访问静态变量?

Mysql从2个表中计算相同的值作为2个不同的计数

java - GWT:在 Chrome 中对 "onFocus event"使用 TextBox.selectAll() 时出现问题