MVC模式在j2me項目中的應用二_JSP教程
推薦:MVC模式在j2me項目中的應用一版權(quán)聲明:本文同時發(fā)表在www.j2medev.com和我的Blog(blog.csdn.net/alikeboy)上,如果需要轉(zhuǎn)載,有三個途徑:1)聯(lián)系我并經(jīng)我同意;2)和www.j2medev.com有轉(zhuǎn)載文章合作協(xié)議的 3)
版權(quán)聲明:本文同時發(fā)表在www.j2medev.com和我的Blog(blog.csdn.net/alikeboy)上,如果需要轉(zhuǎn)載,有三個途徑:1)聯(lián)系我并經(jīng)我同意;2)和www.j2medev.com有轉(zhuǎn)載文章合作協(xié)議的 3)通過Rss聚合我的Blog。另外網(wǎng)上轉(zhuǎn)載需要全文轉(zhuǎn)發(fā)(包括文章的頭部的聲明),不要斷章取義。
正文:
Note項目描述手機是一個真正隨身攜帶的數(shù)字終端,我們除了利用手機打電話、發(fā)信息外,往往讓他幫助我們記錄文字性的信息。PDA有較大的屏幕和手寫輸入的功能,而手機上的記事功能有限,記錄的內(nèi)容很簡單�?梢哉f利用手機記錄信息是一種被視為理所應當?shù)墓δ�,也造就了一個一系列的應用——將手機作為隨時隨地的信息收集器。不難設想此類應用會用一定的市場,我們今天選擇的Note記事本項目,正是此類應用的單機版的原形。
Note是很多手機的內(nèi)建應用程序,一般叫做記事本或便簽,說明這是一個非常常用的服務。也許朋友們可能認為開發(fā)一個已有的程序沒有挑戰(zhàn)性。是的,在開發(fā)上最忌諱的就是重作車輪,但對于教學則可兩說著。畢竟一個簡單的原型程序不會讓我們陷入太多的細節(jié),我的主旨是向大家介紹MVC模式的應用方法。
Note為手機用戶提供記錄一些簡短信息的功能,用戶可以添加記錄,打開瀏覽記錄,并可以隨時修改已經(jīng)保存在手機上的記錄,當然也可以刪除它們。就好象Windows下的記事本一樣,只不過多了管理的功能。
用例分析首先設想一下誰在使用這個程序:手機用戶。好,我們以后就稱這個參與者為用戶(user)。
然后設想一下,用戶都利用我們的NOTE(中文我們叫做記錄好了)干些什么呢?很顯然,用戶可以添加新的記錄,瀏覽他添加的記錄,修改他所添加的記錄,并且他還可以刪除記錄。一條記錄應該簡單的包括用戶對記錄起的名字,記錄的創(chuàng)建或修改時間,以及最重要的記錄的內(nèi)容。
一般的情況開發(fā)人員是很反感這種文字性的描述的,往往是因為開發(fā)人員習慣于對待硬梆梆的PC機,而不愿意去面對客戶,收集這種需求。其實文字性的東西,既是一個對系統(tǒng)的概述,又是我們發(fā)現(xiàn)開發(fā)要素的土壤。試想如果你的軟件要發(fā)布了,你卻無法組織起語言讓用戶恰當?shù)睦斫廛浖墓δ芘c使用對象,是多么的讓人煩惱。
精練用戶的需求(其實是我的教學需求哈哈)。很顯然添加記錄與修改記錄同屬于對記錄進行編輯操作,就叫做編輯記錄用例(NoteEdit)好了。瀏覽記錄也是一個很明顯的用例,就叫做瀏覽用例(Notepad)。刪除是對記錄進行的一種管理,叫做管理記錄用例(NoteManager)。到此,我們已發(fā)現(xiàn)并精練了三個主要用例,還不錯,系統(tǒng)正一步步變的清晰。在這里提醒大家,這個階段是站在客戶的觀點(這里是用戶的觀點)想問題的,你的工作是發(fā)現(xiàn)并系統(tǒng)化客戶的想法,不必站在開發(fā)者的角度思考任何細節(jié)。

編輯記錄用例(NoteEdit)
事件流1:
1) 顯示用戶Note的內(nèi)容
2) 用戶編輯內(nèi)容
3) 用戶放棄修改,note內(nèi)容不變,正常退出
事件流2:
1) 顯示用戶Note的內(nèi)容
2) 用戶編輯內(nèi)容
3) 用戶save,退回主菜單
事件流3:
1) 顯示用戶Note的內(nèi)容
2) 用戶編輯內(nèi)容
3) 用戶save As,提示讓用戶輸入新的文件名
4) Save,退回主菜單
瀏覽用例(Notepad)
事件流1:
1) 顯示用戶的Note的標題、創(chuàng)建時間、內(nèi)容
2) 用戶選擇退出,返回主菜單
事件流2:
1) 顯示用戶的Note的標題、創(chuàng)建時間、內(nèi)容
2) 用戶顯示編輯,轉(zhuǎn)向編輯用例
管理記錄用例(NoteManager)
事件流1:
1) 顯示用戶的Note列表
2) 用戶打開選擇的Note,轉(zhuǎn)向瀏覽用例
事件流2:
1) 顯示用戶的Note列表
2) 用戶編輯選擇的Note,轉(zhuǎn)向編輯用例
事件流3:
1) 顯示用戶的Note列表
2) 用戶新建一個Note,轉(zhuǎn)向編輯用例
事件流4:
1) 顯示用戶的Note列表
2) 用戶刪除選擇的Note
3) 出現(xiàn)確認提示
4) 用戶確認,刪除Note
5) 更新顯示,回到Note列表
三個用例的事件流一經(jīng)被分析出來了,很顯然應該在第一次迭代全部完成。
尋找類(oo分析)首先是實體類(Entity),只需要從事件流中提取名字就可以縮小范圍。
Note,顯然是個對象。
內(nèi)容(content)、時間(datetime)、標題(title),恩,應該是Note的元素。
Note的方法包括對域成員的操作set/get。因為要保存,所以需要序列化反序列化方法。
一般實體類都是由一個對應的生命周期類(lifecycle)用于他的產(chǎn)生、存儲、消亡等等操作,一般把這樣的操作獨立出來大大有利用實體類的重用。不過此階段還用不著分析他,一會兒畫順序圖時,自然就會發(fā)現(xiàn)它。
習慣上為了高效的畫順序圖,邊界類和控制類的方法都需一一列出。不過我們省了,大家只知道每個用例都對應著一個邊界類就好了。
設計實踐我舉三個用例中管理記錄用例(NoteManager)的一部分和瀏覽用例(Notepad)的一部分來介紹詳細的設計過程。在這里,我們試圖從一個客戶的角度轉(zhuǎn)化到一個開發(fā)者角度。要面對很多的挑戰(zhàn),可能包括一部分細節(jié)。應該學習從分離的角度思考整個系統(tǒng)。MVC的精華就在這里。
記錄用例(NoteManager)事件流1:
(點擊查看原圖)
NoteManagerUI并不知道Note列表的具體組織形式,它通過預先商定好的接口getNoteTitleList向控制類NoteManagerWorkflow所要數(shù)據(jù),控制類返回一個String[]數(shù)組。
同樣,NoteManagerWorkflow需要向生命周期類NoteLocator所要數(shù)據(jù),不過NoteManagerWorkflow知道數(shù)據(jù)的細節(jié)。為了能夠識別數(shù)據(jù),除了返回記錄的Title這一信息外,還要同時返回一個唯一識別的ID作為整個系統(tǒng)內(nèi)識別Note的方法。所以NoteManagerWorkflow就有了兩個域一個是TitleList、一個是IdList。
這里有幾個細節(jié):
1) NoteManagerUI、NoteManagerWorkflow如何通信,這不成問題,我們有理由相信他們是緊密相關(guān)的。
2) NoteManagerWorkflow如何找到NoteLocator,一般情況下,NoteLoator都是單件Singlton。
3) 當NoteManagerUI的showNote(index),調(diào)用的時候,他會調(diào)用NoteManager的showNoteDispose(index),而showNoteDispose會根據(jù)內(nèi)部的實現(xiàn),將這一Index轉(zhuǎn)化為id用于識別Note
瀏覽用例(Notepad)事件流1:

NotepadUI向控制類所要標題,控制類有域note、和noteid,但是控制類通過getNode,這里很明顯的可以使用惰性初始化技術(shù),向生命周期類所要Note。取得記錄對象的引用后,你可以方便的像實體類請求數(shù)據(jù)了。
經(jīng)驗分享當然了,打好骨架后你就可以開始時coding了,畫圖的好處是強迫你在設計階段做好各個部件之間的接口設計。這可以有效地減少你返工的幾率,但是往往我們在設計階段過多的思考了細節(jié),比如NoteLocator是如何和Rms交流的等等。這都是很不好的習慣,但是不太容易改正。因為無論是學校里,還是陪訓等等都是訓練,反復的訓練我們對coding的敏感。我們太依賴于從代碼的角度思考問題了,這阻礙了我們從大局思考問題,發(fā)現(xiàn)更通用的模式。
如果要開始coding了,也不要一開始就全面鋪開,一般實體類具有很強的獨立性�?梢元毩㈤_發(fā),而開發(fā)其它類的時候可以從邊界類開始,如果想一邊開發(fā)一邊測試一下,大可把控制類、生命周期類的方法暫時用fade data(偽支撐數(shù)據(jù)),這都是大大降低復雜性的好辦法。
有條件的話請進行單元測試,不然測試效率實在是低。(Ps,有人寫篇j2me下使用單元測試的文章好嗎,我好想讓測試自動化)
惰性初始化是我使用的最為頻繁的技術(shù),我覺得它可以大大降低代碼混亂的程度。
整個系統(tǒng)的UML
(點擊查看原圖)
有人說看不懂UML,但如果給我這么大的代碼,我肯定看不懂。UML嗎,有可能看懂:)
屏幕快照開始后的畫面:(管理用例)

新建后的畫面:(編輯用例)

按下save,輸入title名字

更新顯示:

選擇你喜歡的瀏覽,比如標題是easy的記錄:(瀏覽用例)

屏幕導航:

代碼種種
有朋友不愿意公開自己的代碼,但是對于java來說,反編譯太容易了。你沒有什么秘密可言。相對于設計來說,代碼是個很細碎的東西。如果有人愿意為你修改代碼,共同完善的話,那是打著燈籠也找不到的呀,我用eclipse開發(fā),就是在使用開放源碼的結(jié)晶呀。當然這是對文章的附加代碼而言。真正的項目如果開源一定要在GPL下進行。誰也不想再出現(xiàn)divx那樣的事了。轉(zhuǎn)載的朋友,再說一遍免費不但等于 not copyright。
分享:J2ME中使用記錄存儲系統(tǒng)RMS存儲信息在MIDP中,沒有文件的概念,所以永久存儲一般只能依靠記錄存儲系統(tǒng)實現(xiàn),關(guān)于記錄存儲系統(tǒng)的簡介,可以參看教程:http://www-900.ibm.com/developerWorks/cn/java/j-wi-rms/index.sht
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復習整理
- JSP腳本元素和注釋復習總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實現(xiàn)
- 網(wǎng)頁模板:關(guān)于jsp頁面使用jstl的異常分析
- JSP頁面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項目中連接Access數(shù)據(jù)庫的配置方法
- JDBC連接Access數(shù)據(jù)庫的幾種方式介紹
- 網(wǎng)站圖片路徑的問題:絕對路徑/虛擬路徑
- (jsp/html)網(wǎng)頁上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對路徑下的圖片解決方法
- 相關(guān)鏈接:
- 教程說明:
JSP教程-MVC模式在j2me項目中的應用二
。