如果我担心的话,我的主课上有大约1万行代码



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

问题是我的主类目前有10663行(7000行是由设计者插入的,框架设计生成的代码)。这会引起什么问题吗?我是Java的新手,读到一个类的方法不应该超过20个/500行代码。我只有大约15个方法,但有10k行代码,这会是个问题吗?

不能从OOP的角度拆分或重新思考代码,因为这不是一个真正的OOP问题,我只是在按下一些按钮时用MySQL数据库中的数据填充一些表(许多表)/用许多表单中的数据更新数据库。

编辑:我觉得我还没有给出足够的细节,所以我会在这里补充所有需要了解的信息。这基本上是我的大学毕业论文,在我拿到成绩并毕业后,它不会再被使用或更新。它是关于为酒店接待创建一个软件产品的,从添加客户、办理入住手续到管理向客户提供的基本/额外服务等,无所不包。当我开始这个项目时,我没有Java知识,我一直在学习。我有一个Java文件,它可以完成所有与DB相关的工作,例如添加/删除/更新记录等。我有一个包含上述问题的表单文件——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还很陌生。

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

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

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

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

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新