上周就獲悉我和一位學弟做的東軟杯的比賽項目已經晉級決賽,于這周二晚上進行決賽。由于我要考試,所以沒辦法去給學弟助陣,只是對軟件的結構寫點介紹性的文字,幫助他到時候上臺講解。
其實這個東西有多么爛的表現層我們心理都很清楚,但為什么能進決賽?說明——別人的比我們更爛!!哈哈~廢話不多說了,不管有多爛,畢竟自己曾經花時間做過的東西,就留作紀念吧,要說維護的話其實也難——我沒多少時間再去幫他維護了...這里把我為他明天寫的東西貼上來留作紀念吧,我很少寫那么多字,我也討厭寫那么多文字,不容易,所以一定要貼出來留個紀念:
軟件結構示意圖:
?
1) ? 軟件結構簡介:本軟件采用分層結構設計,自頂向下分為表現層、邏輯層、服務層和數據層。數據層負責組織軟件中用到的數據,采用 xml 文件格式存儲;服務層提供了對底層數據的存取的基本功能,是上面一層(邏輯層)獲得數據的唯一通道,仿 DAO 模式構建;再上面一層的邏輯層是整個軟件功能實現的基礎,它提供了一系列與軟件主要功能相關的類來實現主要功能,如生成試題、播放音樂、為試題打分等,上面的表現層將調用邏輯層的類來構成界面;最上面一層就是表現層了,采用 Java Swing GUI 做成的用戶界面。
2) ? 可拆卸的表現層:其中,表現層需要調用邏輯層里定義的各種功能,但它并不是簡單地直接調用。這里運用了 Fa?ade[fesa:d] 設計模式將邏輯層中各類的與主要功能相關的方法匯總、組織了起來,所以整個表現層和整個邏輯層都只通過這個僅有的 Fa?ade 模式實現類聯系了起來,實現了松散耦合。界面的大規模改動并不會影響到邏輯功能的實現,這方便了今后對界面的改進。不僅如此,這個 Fa?ade 模式的實現類還為我們的軟件帶來另一種可能的便利:更換表現層。也就是說,如果我們今后打算做一個 B/S 架構的類似軟件的話,只需要把 Swing 的表現層拆掉,換上基于 JSP 技術的表現層即可,這種方便可拆卸的表現層設計能增加軟件各部分重用的可能。
3) ? 面向接口的設計:各層之間的耦合基本上全部通過接口,也就是說上面一層對下面一層的“了解”只是接口而已,方便下面一層對上面一層隱藏具體實現。例如,數據層中 DataLoader 接口的實現類是用來操作底層數據的,但上面一層(服務層)只通過 DataLoader 接口和數據層耦合, DataLoader 的具體實現完全不知曉。也就是說若今后打算改用數據庫來存儲軟件的數據的話,只需要再編寫一個支持數據庫操作的 DataLoader 實現類,再通過修改配置文件將其依賴注入到服務層即可,而服務層本身的代碼不需要任何改動,和先前使用 xml 存儲時的行為完全一樣。這方便了數據的移植,進一步增加了可重用性。若再要切換回 xml 文件存儲方式的話也只需要改改配置文件。
4) ? Xml 文件存儲數據:選用 xml 文件對數據進行存儲是因為 xml 文件本身是純文本文件,占用空間不算大,但比一般的純文本文件優越的地方是 xml 文件能方便地描述數據的存儲結構,其描述數據存儲結構的能力更接近數據庫,使得軟件能夠直接從中讀取有一定組織結構的數據。比如閱讀題的數據分為題目名、文章、五個問題以及每個問題的四個選項,軟件利用 Java 標準庫中的 xml 操作相關的 API 能夠直接而準確地得到任何一道閱讀題的完整數據,并封裝成相應的傳值對象交給邏輯層處理,非常方便。若采用二進制文件存數據的話,雖然節省空間一點,但會增加設計存儲結構的工作量,增加存取操作的代碼量,也給今后的維護工作增加了難度。利用 xml 的這些優勢,到目前為止,本軟件已經毫不費力地收錄了四級詞庫、六級詞庫、研究生詞庫共計 8000 多個單詞;高質量交響樂及 alpha 波樂 16 首; 3D 圖片、靜態圖片等 60 張;四六級短文十余篇。而在今后的擴展過程中將遠遠不止這些。
5) ? 引入 Spring 框架:由于面向接口的設計與工廠模式的結合能產生出各層之間低耦合度的優秀架構,而 Spring 框架正是一個強大的工廠模式實現,用它來管理我們的服務層、數據層的類,并且利用它提供的依賴注入功能為各層類中的接口注入了具體實現類,也就是說代碼中沒有具體實現類的影子,完全實現了面向接口編程的目標。這樣做有利于今后的擴展及代碼的重構,使大部分的維護工作只通過增加實現類和修改配置文件即可完成,不需要對既有的類進行更改。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
