這篇延續最近在做的 Java
專案,想聊聊在這個專案的一些心得。
Java
具有物件導向的特性,而這次碰到的這個專案,是要寫個 GUI 的介面出來,概念不難,但是要畫的元件非常多,相當的雜,一不小心 code 就會糙起來了。
是碼農,還是程式設計師,從對 clean code 的概念以及寫 code 的概念就有非常大的差別,自己也仍然在這條學習的路上,寫糙 code 的維護成本是非常高的(因為自己曾經體會過QQ),付出過代價之後才發現 clean code 的重要性!
現實面來講,要是專案很有邏輯的話,在維護跟製作的過程一定會花更少的時間,當然啦~這就是為何會有人說,二流的工程師才需要加班。
這只是參考,絕對不是最好的解法。
在這個專案會使用到很多的 JTable
,每個 table 裡面的 columns 又相當的多,下面是簡化的幾個要點。
談專案時
那時在談專案的時候,就有感受到要處理很繁雜的公式加總(要算稅值那方面的),而我這個沒接觸過他們專業的門外漢,必須先想辦法把每一細項的計算都先學會,而案主是把所有的知識先教給我,之後我再自行整理。
我覺得在整理的時候,就是一個可以讓程式複雜度降低的過程,哪些事情是重複的,哪些元件其實設計得過於複雜 ... 等等。
Coding 時
自己的 code 習慣是,會先稍微規劃之後,就開始寫,邊寫就邊有感覺哪些東西可以簡化,寫到某個功能確定完成之後,再回過頭來大幅度的整理。
舉個例子,這個專案需要用到許多張表格,而我一開始的確是使用了 JTable
下去做,做著做著發現,我希望這個表格有 row 的 header(原生沒有)、我希望這個 JTable
的 cell 只要點擊一次就可以進行編輯(原生要點擊兩次)、我希望有些 column 不能被編輯 ... 等等,這些都是在寫 code 的時候發現的(功力還沒好到一開始就規劃好)。
所以之後自己又把這些想要客製化的功能,額外做一個 class,去 extends
JTable
,這個動作讓我清潔了好多重複性很高的糙 code,也提高了程式的閱讀性。
setRowSelectionAllowed
,是為了不要出現 row selected background。
JTable table = null;
if(hasRowHeaders) {
table = new JTable(dm){
public boolean isCellEditable(int row, int column) {
if(column == 0) {
return false;
}
return true;
};
};;
}else {
table = new JTable(dm);
}
table.setRowSelectionAllowed(false);
DefaultCellEditor singleclick = new DefaultCellEditor(new JTextField());
singleclick.setClickCountToStart(1);
for (int i = 0; i < table.getColumnCount(); i++) {
table.setDefaultEditor(table.getColumnClass(i), singleclick);
}
table.getTableHeader().setPreferredSize(
new Dimension(this.getWidth(), 35)
);
this.getViewport().add(table);