軟體工程中有所謂的 MVC 模式 (Model-View-Controller) , M 就是我們發展好的 Encrypt 類別 (class) ,而 V 就是使用者介面 (user interface) ,至於 C 則是控制 M 與 V 之間的物件 (object) ,三者在物件導向 (object-oriented) 觀念裡都應該是獨立個別的物件
當然可以完全從頭到尾手動自己刻程式碼,倒是規模小的程式裡容易把 V 跟 C 混在一起,或是 M 、 V 、 C 都湊合定義在同一個類別,並不是不可以,但我們不鼓勵這麼做,主要因為在發展大型程式的時候, M 、 V 、 C 任何一部分有問題,或是需要除錯都可以分開進行。
怎麼說呢?想像開發好的 M 、 V 、 C 的程式碼都超過 300 行,如果都混在同一個類別裡,那個類別的實作檔案可能有超過 1000 行程式碼,如果一個地方有問題,最怕是語意錯誤 (semantic error),就得仔細檢查超過 1000 行的程式碼,慢慢找錯誤出來,幸運一點就都是自己寫的,還比較容易找錯誤。
可是實際上一個大型軟體動輒都是數十萬到數百萬行程式碼,而且很多都是自己加入某個開發專案,這麼一來,如果這個專案是個古老的舊專案,完全沒有用軟體工程 (software engineering) 研究出來的方式維護程式碼,那真的要除掉一個 bug 得耗費許多心力。
因此學習開發軟體不外就先建立 MVC 開發模式的觀念囉! JavaFX Scene Builder 提供視覺化的方式設計圖形使用者介面 (graphical user interface) ,這是利用 FXML 進行視窗元件的編排,編輯 .fxml 檔案就會編譯成實際的執行檔,這也就是 MVC 模式中 V 的部份。
FXML 屬於 XML 的一種格式化標記語言。
同時 NetBeans 會建立一個 Controller 類別,藉由這個視窗類別控制圖形介面與使用者與 M 的互動,也就是 GUI 中的事件處理 (event handling) , MVC 模式中 C 的部份。好了,這樣的開發概念是不是很簡單呢?簡單分成下列三個步驟
- 建立專案
- 設計使用者介面
- 設定事件處理
首先要來建立新專案,點擊工具列的〔New Project〕按鈕
就會出現 New Project 視窗,選擇 Categories 中 JavaFX 的 JavaFX Application
最後點擊下方的〔Next〕按鈕
接著出現 New JavaFX Application 視窗
我們將專案名稱改成 Encryptor ,後點擊下方的〔Finish〕按鈕
這樣就建立好新專案了,預設有 Encryptor.java 、 FXMLDocument.fxml 及 FXMLDocumentController.java 三個檔案
下面我們逐一將 FXMLDocument.fxml 與 FXMLDocumentController.java 更改檔案名稱,先將滑鼠游標移到 FXMLDocument.fxml 上按滑鼠右鍵,就會出現快顯選單,然後點擊〔Rename〕按鈕
接著就會出現 Rename 視窗,這裡將檔名改成 EncryptorFXML ,最後點擊〔OK〕按鈕
至於修改 FXMLDocumentController.java 的檔案名稱比較麻煩一點,要從快顯功能表中的〔Refactor〕找到〔Rename〕
點擊這個選項就會出現修改檔名的視窗,這裡將檔名改成 EncryptorController ,然後點擊〔Refactor〕
這樣檔名的修改完成了
下個單元我們來仔細看看這幾個檔案的程式碼囉!
中英文術語對照
MVC 模式 | Model-View-Controller |
類別 | class |
使用者介面 | user interface |
物件 | object |
物件導向 | object-oriented |
語意錯誤 | semantic error |
軟體工程 | software engineering |
圖形使用者介面 | graphical user interface |
事件處理 | event handling |
重點整理
- MVC 模式是分成資料模型、使用者介面及兩者間控制三個部分,在物件導向程式設計中,三個部分各是獨立的物件。
- JavaFX Scene Builder 可直接以視覺化的方式編輯 FXML 文件,這也是 JavaFX 設計圖形使用者介面的地方。
- 利用 NetBeans 開發 JavaFX 專案,簡單分成建立專案、設計使用者介面、設定事件處理三個步驟。
問題與討論
- 什麼是 MVC 模式?為什麼要用 MVC 模式開發軟體?
- 利用 NetBeans 開發 JavaFX 專案分成哪幾個步驟?
the end
沒有留言:
張貼留言