2014年1月16日 星期四

[Java/Android]選取Spinner的內容同時改變Button的功能 (為何程式設計師流動率高?)

上面(假設)是個Android功能的UI,資料處理方式可能是「各種加密方法」或「將資料傳向特定網站或資料庫」。

EditText和Spinner的使用及設定方式,我不想花太多力氣詳述,(我講概念/心得/天馬行空亂撞的結果,不講別人寫死的技術規格。)

一般來說,程式寫法很多、怎樣寫都行,但我覺得最糟糕的寫法就是用匿名/無實體的類別搭配ArrayList<String>來作為SPinner的Adapter。



首先在會使用到這個介面的Activity中設定一個參數int p,同時設定一個OnItemClickListener,在這個介面的功能onItemClick(AdapterView<?> parent, View view, int position, long id)中,int position參數可以傳給p( p = position )。

「送出」按鈕的OnClickListener則是會判讀參數p的值,如果是0,就表示使用者選擇了方法一,如果是1,就表示使用者選擇了方法二...以此類推,然後在各個判別條件後寫入真正的「方法一/方法二........」的程式碼。



而且,這些Adapter/OnItemClickListener/OnClickListener都是用匿名/無實體的類別來設計。

程式碼全都擠在一支Activity的程式中。 (對這些人來說,Java的「物件導向」只是寫Java程式不得不應付的「規則」和「語法」罷了!類似「每支程式都是用class這串字當開頭」之類的限制。他們很擅長應用別人寫好的物件、把那些物件當成基礎指令套件一樣使用,他們知道怎麼把程式結構化,但他們並沒有真的在思考怎麼把程式物件化。)



我碰到一堆人把「這樣才是成熟的工程師寫程式該有的風格」當成聖經。

即使這個功能將來如果要新增Spinner中的「方法」好達到擴充功能的目的,結果接手的人找不到「方法」寫在什麼位置,而導致整個程式只能無條件要打掉重寫........(一個功能只有一個輸入框、一個彈出選項、兩顆按鈕的功能不太可能發生這種「接手的人找不到舊功能程式碼寫在什麼地方」的窘境,所以大家假設一下這個功能有三個輸入框,同時有兩個彈出選向來交叉決定「功能」,還有三個按鈕可以選取,同時這個功能要能應付至少六種客製化版本........)

怎辦?「換個人來寫程式。」

他們永遠不會發現「自己家的Java工程師流動率非常高,特別是菜鳥陣亡率奇高無比!」他們只會慢慢的歸納出一個結論:真的會寫程式的人好少。



(下一篇......)

沒有留言:

張貼留言