我正在使用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还很陌生。
缺乏适当的结构会导致难以承受的复杂性和认知负荷。最终,向应用程序添加新功能或更改任何行为都将变得非常不愉快、困难甚至不可能。你好像就要撞到那堵墙了。
您可以从用户界面中分离所有与数据库相关的代码开始。您作为示例给出的侦听器方法不应该处理连接和查询字符串等。它真正需要的功能是从某个存储库中获取某些客户。您需要考虑层和/或模块。将生成的代码与编写的代码分离也是明智之举。
一个简单的MVC结构可以适用于您的应用程序。下面是一个简单的例子,展示了如何使用Swing实现它。
当代码由工具自动生成时,当它变得臃肿时通常不会有问题,因为它通常不应该是人类可读的。
然而,当您将自动生成的代码与自己的代码混合使用时,它确实会出现问题。你通常无法在不破坏自己工作的情况下重新生成代码,读取代码的工具会被你的修改弄糊涂,修改机器生成的代码很少是一种愉快的体验。
在可能的情况下,您应该避免编辑自动生成的代码,并在不同的类中进行任何自己的编程。
你没有告诉我们太多关于你的课程,所以我们只能猜测什么是改进你的课程设计的好方法。但是,当您有多个表、按钮和窗体时,为每一个创建一个单独的类是有意义的。
是的,担心。除了当.form文件被破坏时会很痛苦之外,还有更多。拆分和分离视图,JPanel形式。数据可能真的是硬编码的数据。
我知道来自NetBeans设计器的代码。。。它很快就变得很乱。但只要你只和设计师一起工作,你就应该没事。较长的类往往在一段时间后变得无法维护。你真的应该把一些代码放到单独的类中。数据库抽象是否使用OR映射器?如果是这样,您可以为每个表单创建实体循环,这将极大地简化您的代码