2013-06-28 104 views
0

我正在用NetBeans设计器创建一个Java框架。它非常广泛,主要是关于从数据库中插入和获取数据。我的主要课程中有大约10k行代码,我应该担心吗?

事情是我的主类现在有10663行(由设计者插入的7000帧设计生成的代码)。这会导致任何问题吗?我是Java新手,并且读过一个类不应该有20多个方法/ 500行代码。我只有大约15种方法,但是有10k行代码,这会是一个问题吗?

无法分离或重新考虑代码从OOP的角度来看,因为它不是一个真正的OOP问题,我只是用一些按钮按下时用MySQL数据库中的数据填充一些表(很多表)/使用数据更新数据库从众多的形式。

编辑: 我觉得我没有提供足够的细节,所以我会在这里添加所有知识。这是我大学毕业论文的基本内容,我毕业后不会再使用或更新。这是关于为酒店的接待创建一个软件产品 - 从增加客户,签到,管理提供给客户的基本/额外服务等等。当我开始这个项目时,我有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相当陌生。

+2

框架应该*不*负责数据库管理。所以是的,这是一个OOP问题。框架应该引发按钮点击事件,并由其他类处理。 –

+0

您是否熟悉[模型 - 视图 - 控制器](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)范例? – Philipp

回答

3

是的,你应该担心。问题是你的程序缺乏合理的结构。这不仅仅是面向对象,代码生成或大型源文件。仅仅因为该程序仍然比较小,并且没有实际需要考虑可维护性,您可以避开这种情况。

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

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

一个简单的MVC-结构可以为你的应用程序工作。 Here's一个简单的例子,展示了如何用Swing实现它。

0

我知道来自NetBeans设计人员的代码......它非常迅速地变得非常混乱。但只要你和设计师一起工作,你应该没问题。 较长的班级在一段时间后往往变得难以维持。你应该把一些代码放到不同的类中。 您是否使用OR映射器进行数据库抽象?如果是这样,您可以创建每个表单的实体类,这将大大简化您的代码

1

是的担心。除此之外,当.form文件被损坏时,还有更多。拆分和分离视图,JPanel表单。数据可能真的是数据i.o.硬编码。

3

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

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

在某种程度上可能的情况下,您应该避免编辑自动生成的代码,并在不同的类中执行您自己的编程。

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

+0

我已更新了我的原始帖子,并提供了更多关于我的问题的信息。我不修改任何生成的代码,我只是添加按钮,复选框,列表等功能。 – user2399013

相关问题