0

我正在使用 NetBeans 设计器创建一个 Java 框架。它非常广泛,主要是关于从数据库中插入和获取数据。

事情是我的主要课程目前有 10663 行(设计师插入了 7000 行,框架设计 - 生成的代码)。这会导致任何问题吗?我是 Java 新手,并且已经读过一个类不应该有超过 20 个方法/500 行代码。我只有大约 15 种方法,但有 10k 行代码,这会是个问题吗?

无法从 OOP 的角度拆分或重新考虑代码,因为它不是真正的 OOP 问题,我只是在按下某些按钮时使用 MySQL DB 中的数据填充一些表(许多表)/使用来自多种形式的数据更新 DB。

编辑:我觉得我没有提供足够的细节,所以我会在这里添加所有需要知道的东西。这基本上是我的大学毕业论文,等我拿到成绩和毕业后,就再也不会使用或更新了。它是关于为酒店的接待创建一个软件产品——从添加客户、登记入住、管理提供给客户的基本/额外服务等。当我开始这个项目时,我只有 0 的 Java 知识,我一直在学习它。我有一个 Java 文件,它执行所有与数据库相关的事情,例如添加/删除/更新记录等。我有一个包含上述问题的表单文件 - 11k 行代码。这是大部分的样子:

    private void cCautaActionPerformed(java.awt.event.ActionEvent evt) {                                       
    ArrayList<ArrayList<Object>> result;
    ArrayList<String> attributes=new ArrayList();
    String where = "first_name LIKE '%" + cclientName.getText() + "%' OR last_name like '%" + cclientForename.getText() +"%'";
    attributes.add("id");
    attributes.add("first_name");
    attributes.add("last_name");
    attributes.add("address");
    attributes.add("number");
    attributes.add("town");
    attributes.add("county");
    attributes.add("notes");
    attributes.add("cnp");
    attributes.add("type");
    csearchedCustomersList.clear();

    try {
        result = DataBaseConnection.getTableContent("customers", attributes, where, null, null);
        DefaultTableModel model = (DefaultTableModel) csearchTable.getModel();
        DefaultTableCellRenderer centerRender = new DefaultTableCellRenderer();
        centerRender.setHorizontalAlignment( JLabel.CENTER );
        csearchTable.setDefaultRenderer(Object.class, centerRender);
        model.setRowCount(0);
        if (result.isEmpty()) {
            errorMessage("error", "No client found with the specified name!", "Search Error");
        }

        for (int i = 0; i < result.size(); i++) {
            Customers cust = new Customers((String)(result.get(i).get(0)),
                (String)(result.get(i).get(1)),
                (String)(result.get(i).get(2)),
                (String)(result.get(i).get(3)),
                (String)(result.get(i).get(4)),
                (String)(result.get(i).get(5)),
                (String)(result.get(i).get(6)),
                (String)(result.get(i).get(7)),
                (String)(result.get(i).get(8)),
                (String)(result.get(i).get(9))
            );
            csearchedCustomersList.add(cust);
            model.addRow(result.get(i).toArray());
        }
    } catch (SQLException ex) {

    }
} 

例如,这是一个搜索按钮的代码,该按钮使用与搜索词(姓名和名字)匹配的客户填充表。所以 DataBaseConnection 完成了所有的数据库工作。现在的问题是当我尝试添加任何东西时 - 一个新的 JPanel,更改一个按钮的图标.. 基本上添加我得到的任何新代码:错误:找不到或加载主类 Hotel.hotel。不知道我应该如何处理这个问题,因为正如我所说,我对 Java 还很陌生。

4

4 回答 4

3

当代码由工具自动生成时,它变得臃肿通常不是问题,因为它通常不应该是人类可读的。

但是,当您将自动生成的代码与您自己的代码混合使用时,它确实会出现问题。您通常无法在不破坏自己的工作的情况下重新生成代码,读取代码的工具会因您的修改而感到困惑,并且修改机器生成的代码很少是一种愉快的体验。

如果有可能,您应该避免编辑自动生成的代码并在不同的类中进行任何您自己的编程。

你没有告诉我们太多关于你的程序的信息,所以我们只能猜测什么是改进你的类设计的好方法。但是,当您有多个表格、按钮和表单时,为每一个创建一个单独的类可能是有意义的。

于 2013-06-28T12:00:52.733 回答
3

是的,你应该担心。问题是您的程序缺乏合理的结构。这不仅仅是关于 OOP、代码生成或大型源文件。仅仅因为程序仍然相对较小并且实际上不需要考虑可维护性,您就可以侥幸逃脱。

缺乏适当的结构会导致难以承受的复杂性和认知负担。最终向应用程序添加新功能或更改任何行为将变得非常不愉快、困难甚至不可能。看来你快要撞到那堵墙了。

您可以从用户界面中分离所有与数据库相关的代码开始。您作为示例提供的侦听器方法不应处理连接和查询字符串等。它真正需要的功能是从某个存储库中获取某些客户。您需要考虑层和/或模块。将生成的代码与书面代码分开也是明智的。

一个简单的MVC结构可以适用于您的应用程序。这是一个简单的示例,展示了如何使用 Swing 实现它。

于 2013-06-28T13:59:05.930 回答
1

是的担心。除了 .form 文件损坏时会很痛苦之外,还有更多。拆分和分离视图、JPanel 表单。数据可能真的是硬编码的数据。

于 2013-06-28T12:00:49.857 回答
0

我知道来自 NetBeans 设计器的代码......它很快就会变得非常混乱。但只要你只和设计师一起工作,你应该没问题。较长的课程往往会在一段时间后变得无法维护。你真的应该把一些代码放到单独的类中。您是否使用 OR 映射器进行数据库抽象?如果是这样,您可以为每个表单创建实体类,这将大大简化您的代码

于 2013-06-28T12:00:24.927 回答