2013-06-28 143 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

相關問題