例:RSS閱讀器的設(shè)計(jì)方案與實(shí)現(xiàn)_第1頁
例:RSS閱讀器的設(shè)計(jì)方案與實(shí)現(xiàn)_第2頁
例:RSS閱讀器的設(shè)計(jì)方案與實(shí)現(xiàn)_第3頁
例:RSS閱讀器的設(shè)計(jì)方案與實(shí)現(xiàn)_第4頁
例:RSS閱讀器的設(shè)計(jì)方案與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

PAGE《客戶機(jī)服務(wù)器應(yīng)用開發(fā)綜合實(shí)驗(yàn)》題目:RSS閱讀器的設(shè)計(jì)與實(shí)現(xiàn)分院:理工分院班級:11計(jì)算機(jī)科學(xué)與技術(shù)本1姓名:張三學(xué)號:0000000008完成日期:2013年6月8日溫州大學(xué)甌江學(xué)院教務(wù)部二○一二年十一月制目錄TOC\o”1—3"\h\z\uHYPERLINK\l"_Toc346882838"1項(xiàng)目需求 PAGEREF_Toc346882838\h—1-HYPERLINK\l”_Toc346882839”1。1前言?PAGEREF_Toc346882839\h-1-HYPERLINK\l”_Toc346882840"1.2RSS閱讀器研究的背景與意義 PAGEREF_Toc346882840\h—1—HYPERLINK\l”_Toc346882841"1.3分析需求 PAGEREF_Toc346882841\h—2—HYPERLINK\l"_Toc346882842"1。4功能分析 PAGEREF_Toc346882842\h—2—HYPERLINK\l"_Toc346882843”2軟件開發(fā)工具?PAGEREF_Toc346882843\h-3-HYPERLINK\l"_Toc346882844”2.1.NET技術(shù)簡介 PAGEREF_Toc346882844\h-3-HYPERLINK2.1。1公共語言運(yùn)行庫 PAGEREF_Toc346882845\h-3-HYPERLINK\l”_Toc346882846"2.1.2。NET基類庫?PAGEREF_Toc346882846\h—3-HYPERLINK\l"_Toc346882847"2。2c#語言簡介 PAGEREF_Toc346882847\h-3-HYPERLINK3技術(shù)分析?PAGEREF_Toc346882848\h—5-HYPERLINK\l"_Toc346882849"3.1泛型?PAGEREF_Toc346882849\h—5-HYPERLINK\l"_Toc346882850”3。2簡單工廠設(shè)計(jì)模式 PAGEREF_Toc346882850\h-5-HYPERLINK\l"_Toc346882851"3.3序列化與反序列化 PAGEREF_Toc346882851\h—5-HYPERLINK\l"_Toc346882852"4軟件設(shè)計(jì)?PAGEREF_Toc346882852\h-7-HYPERLINK\l”_Toc346882853"4。1設(shè)計(jì)方案概述?PAGEREF_Toc346882853\h—7-HYPERLINK4.2.2頻道基類類設(shè)計(jì)FeedBase。cs PAGEREF_Toc346882856\h-8-HYPERLINK\l”_Toc346882857"4。2.3頻道子類類設(shè)計(jì)RssFeed.cs PAGEREF_Toc346882857\h-8-HYPERLINK\l"_Toc346882858”4.2.4頻道子類類設(shè)計(jì)AtomFeed。cs?PAGEREF_Toc346882858\h—8-HYPERLINK\l”_Toc346882859"4.2。5FeedFactory工廠類設(shè)計(jì)?PAGEREF_Toc346882859\h-9—4.2.7ProfileManger管理配置類?PAGEREF_Toc346882861\h—9-HYPERLINK\l"_Toc346882862"5詳細(xì)設(shè)計(jì)與編碼實(shí)現(xiàn)?PAGEREF_Toc346882862\h—10—HYPERLINK\l"_Toc346882863"5。1類設(shè)計(jì) PAGEREF_Toc346882863\h-10-HYPERLINK\l”_Toc346882864”5.1.1文章類設(shè)計(jì) PAGEREF_Toc346882864\h-10-HYPERLINK\l"_Toc346882865"5.1.2頻道類設(shè)計(jì)?PAGEREF_Toc346882865\h-11-HYPERLINK\l”_Toc346882866"5.1.3FeedFactory工廠類設(shè)計(jì) PAGEREF_Toc346882866\h-12—HYPERLINK\l”_Toc346882867"5。1.5ProfileManger管理配置類 PAGEREF_Toc346882867\h—14—HYPERLINK\l”_Toc346882868"5.2閱讀器界面設(shè)計(jì) PAGEREF_Toc346882868\h-17-HYPERLINK\l"_Toc346882869"5.2。1主界面設(shè)計(jì) PAGEREF_Toc346882869\h-17—HYPERLINK\l”_Toc346882870"5.2。2子界面設(shè)計(jì) PAGEREF_Toc346882870\h-18-HYPERLINK\l"_Toc346882871”5.3數(shù)據(jù)顯示?PAGEREF_Toc346882871\h-19—HYPERLINK\l"_Toc346882872”6結(jié)論?PAGEREF_Toc346882872\h—22-HYPERLINK\l”_Toc346882873"6。1本文完成的工作?PAGEREF_Toc346882873\h—22-HYPERLINK\l"_Toc346882874”6.2軟件的優(yōu)點(diǎn)與缺點(diǎn)?PAGEREF_Toc346882874\h-22—1-1項(xiàng)目需求1.1前言獲得信息是在人類的生活中是必不可少的環(huán)節(jié).如果現(xiàn)在的社會對獲得信息不快捷,那么這個社會將不會像如今這般的發(fā)達(dá)和進(jìn)步。在當(dāng)今網(wǎng)絡(luò)技術(shù)相當(dāng)發(fā)達(dá)的今天,大量的信息充斥在網(wǎng)上?,F(xiàn)在網(wǎng)絡(luò)越來越發(fā)達(dá),用戶在網(wǎng)上既能工作也能娛樂.當(dāng)用戶在網(wǎng)上需游覽很多個網(wǎng)站才能獲取自己多需的信息時(shí),那就感覺很累。因?yàn)楝F(xiàn)在每個網(wǎng)站都有很多信息,找到自己所喜歡的并不是一件輕松的事。這時(shí)RSS閱讀器的功用就體現(xiàn)出來了。每當(dāng)那些網(wǎng)站的信息更新時(shí),閱讀器上的信息也會更新.如何讓RSS閱讀器的功能越來越適合用戶口味,成為各個運(yùn)營商開發(fā)一個實(shí)時(shí),精確,個性化的RSS閱讀器變的至關(guān)重要。對具有高效的閱讀方式的RSS閱讀器來說,它的研究也就有其重要的意義。1.2RSS閱讀器研究的背景與意義RSS閱讀器就是能讀取Rss和Atom兩種格式文檔的軟件。RSS通常被用于新聞和其他按順序排列的網(wǎng)站,例如Blog。RSS這種高效的閱讀方式在國內(nèi)并沒有得到普及。除了一些博客和主流媒體網(wǎng)站外,到目前為止大多數(shù)人對RSS還并不熟悉。RSS的目標(biāo)群體是有定向閱讀習(xí)慣的人,但RSS源的質(zhì)量一直是好差不等的,門戶網(wǎng)站信息太多、小網(wǎng)站信息又少,使得RSS使用者難以壯大。目前比較受歡迎的信息主要是BLOG、分類新聞。國內(nèi)的RSS內(nèi)容提供商數(shù)目也還不是很多.比較有名的國內(nèi)RSS閱讀器有鮮果,抓蝦等?,F(xiàn)在的閱讀器主要分為三種:第一種閱讀器是運(yùn)行在計(jì)算機(jī)桌面上的應(yīng)用程序,通過所訂閱的網(wǎng)站或博客中的新聞提供信息,可自動及時(shí)的獲得更新了的新聞。第二種閱讀器是已內(nèi)含在計(jì)算機(jī)應(yīng)用軟件中。例如,Outlook已經(jīng)內(nèi)建了RSS的文件夾,用戶只要點(diǎn)擊網(wǎng)站訂閱按鈕或手動在Outlook中加入RSS地址就可以了。第三種閱讀器是在線的閱讀器,其優(yōu)點(diǎn)在于不用安裝就可以獲得RSS閱讀的功能,推薦和收藏自己感興趣的文章。提供這種服務(wù)的主要有兩類網(wǎng)站,一種是專門提供RSS閱讀器的網(wǎng)站,例如GoogleReader和鮮果;另一種是提供個性化首頁的網(wǎng)站,例如netvibes和雅蛙.現(xiàn)在網(wǎng)站的廣告、不健康的內(nèi)容充斥著屏幕。這使用戶更喜歡自己可以控制的體驗(yàn)。在一些大的主流媒體網(wǎng)站的推廣下,RSS的用戶會越來越多。這使越來越多的內(nèi)容提供者為了獲得更大的客戶群也會推出RSS服務(wù),靠這樣來獲得更大的流量和知名度。在新聞出版領(lǐng)域,RSS技術(shù)作為電子出版的一個新型渠道已經(jīng)在新華社等新聞機(jī)構(gòu)得到了嘗試,并逐漸成熟走向商業(yè)化。RSS是偉大的發(fā)明,它讓讀者從被動接受變成主動篩選,極大提高了閱讀效率,減少了閱讀的額外時(shí)間消耗.由于大多數(shù)用戶對這個新技術(shù)還不怎么熟悉,不怎么會用,除了一些用后愛不釋手的技術(shù)人員或關(guān)注資訊方面的從業(yè)人員外,普通用戶跟本就沒用上這個新技術(shù),他們了解資訊最多也不過是看看百度新聞或門戶網(wǎng)站新聞之類的對于RSS訂閱服務(wù)只是抱著試試看的想法,日積月累下來大家沉淀下來的用戶并不多,這部分用戶距離消費(fèi)比較遠(yuǎn).這些原因最終導(dǎo)致了RSS閱讀器發(fā)展?fàn)顩r不佳。從技術(shù)來說上還沒有什么能代替RSS。相信在不久的未來,RSS技術(shù)會被廣泛應(yīng)用。1.3分析需求本設(shè)計(jì)要設(shè)計(jì)一個RSS閱讀器,其實(shí)RSS是站點(diǎn)用來和其他站點(diǎn)之間共享內(nèi)容的一種簡易方式(也叫新聞聚合)。通常被用于新聞和其他按順序排列的網(wǎng)站.一段項(xiàng)目的介紹可能包含新聞的全部介紹等?;蛘邇H僅是額外的內(nèi)容或者簡短的介紹.這些項(xiàng)目可以稱為頻道,一個頻道的鏈接通常能鏈接到全部內(nèi)容。網(wǎng)絡(luò)用戶可以在客戶端借助于支持RSS的新聞聚合軟件(例如抓蝦、周博通游覽器、本設(shè)計(jì)的NewsReader),在不打開網(wǎng)站內(nèi)容頁面的情況下,將網(wǎng)站提供的支持RSS輸出的網(wǎng)站內(nèi)容(新聞、Blog等)聚集到RSS閱讀器中,用戶可以不必登錄各個提供信息的網(wǎng)站,而通過“RSS閱讀器"來閱讀這些內(nèi)容。1。4功能分析本設(shè)計(jì)的類的功能如下:(1)文章類Article:它的屬性主要有文章的標(biāo)題和文章的鏈接地址。(2)頻道類(FeedBase類、RssFeed類、AtomFeed類):用來保存頻道信息的新聞訂閱點(diǎn)。(3)工廠類FeedFactory:自動辨別從網(wǎng)上獲得的Feed文件是Rss類型還是Atom類型。(4)配置類Profile:用來保存閱讀器中顯示的各個頻道的集合。(5)類ProfileManger:用來管理配置信息的Profile類.本設(shè)計(jì)的UI界面主要有如下幾個:(1)主界面:軟件使用的主要界面。(2)頻道增加界面:用于新增頻道所需的界面。(3)頻道修改界面:用于修改頻道所需的界面。(4)頻道刪除界面:用于刪除頻道所需的界面。(5)頻道查看界面:用于查看頻道所需的界面.(6)幫助里的RSS介紹界面:介紹RSS的定義及原理。(7)幫助里的RSS使用界面:介紹RSS的使用方法.(8)幫助里的關(guān)于RSS版本信息界面:介紹RSS的版本信息.2軟件開發(fā)工具2。1.NET技術(shù)簡介.NET是Microsoft公司發(fā)布的新一代的系統(tǒng)、服務(wù)和編程平臺,主要由.NETFramework和MicrosoftVisualStudio。NET開發(fā)工具組成。。NETFramework是一種新的計(jì)算平臺,它包含了操作系統(tǒng)上軟件開發(fā)的所有層,簡化了在高度分布式Internet環(huán)境中的應(yīng)用程序開發(fā)。。NETFramework主要包含兩個最基本的內(nèi)核,即公共語言運(yùn)行庫(CommonLanguageRuntime,簡稱CLR)和。NETFramework基本類庫,它們?yōu)?NET平臺的實(shí)現(xiàn)提供了底層技術(shù)支持。下面將分別做詳細(xì)的介紹.2。1。1公共語言運(yùn)行庫公共語言運(yùn)行庫是。NETFramework的基礎(chǔ),是。NETFramework的運(yùn)行環(huán)境。公共語言運(yùn)行庫是一個在執(zhí)行時(shí)管理代碼的代理,以跨語言集成、自描述組件、簡單配置和版本化以及集成安全服務(wù)為特點(diǎn),提供核心服務(wù)(如內(nèi)存管理、線程管理和遠(yuǎn)程管理)。公共語言運(yùn)行庫還強(qiáng)制實(shí)施嚴(yán)格的類型安全以及可確保安全性和可靠性的其他形式的代碼準(zhǔn)確性.公共語言運(yùn)行庫遵循公共語言架構(gòu)(簡稱CLI)標(biāo)準(zhǔn),可以使C++,C#,VisualBasic以及JScript等多種語言深度集成。在。NETFramework中,用一種語言所寫的代碼能繼承用另一種語言所寫的類實(shí)現(xiàn),用一種語言所寫的代碼拋出的異常能被另一種語言寫的代碼捕獲。2.1.2。NET基類庫.NETFramework的另一個主要組件是類庫,它是一個綜合性的面向?qū)ο蟮目芍赜妙愋图?,例如ADO。NET,ASP.NET等。.NET基類庫位于公共語言運(yùn)行庫的上層,與。NETFramework緊密集成在一起,可被.NET支持的任何語言所使用。.NET類庫非常豐富,提供數(shù)據(jù)庫訪問、XML、網(wǎng)絡(luò)通信,線程,圖形圖像、安全、加密等多種功能服務(wù).類庫中的基類提供了標(biāo)準(zhǔn)的功能,例如輸入輸出、字符串操作、安全管理、網(wǎng)絡(luò)通信、線程管理、文本管理和用戶界面設(shè)計(jì)功能。這些類庫使得開發(fā)人員更容易地建立應(yīng)用程序和網(wǎng)絡(luò)服務(wù),從而提高開發(fā)效率。2.2c#語言簡介本設(shè)計(jì)是用C#語言編寫的。C#是一種面向?qū)ο蟮木幊陶Z言,主要用于開發(fā)可以在.NET平臺上運(yùn)行的應(yīng)用程序。C#的語言體系都構(gòu)建在.NET框架上,它是C和C++派生出來的一種簡單、現(xiàn)代、面向?qū)ο蠛皖愋桶踩木幊陶Z言,并且能夠與.NET框架完美結(jié)合。C#具有以下突出的特點(diǎn):(1)語法簡潔.不允許直接操作內(nèi)存,去掉了指針操作。(2)測底的面向?qū)ο笤O(shè)計(jì)。C#具有面向?qū)ο笳Z言所應(yīng)用的一切特性——封裝、繼承和多態(tài).(3)與Web緊密結(jié)合,C#支持絕大多數(shù)的Web標(biāo)準(zhǔn).(4)強(qiáng)大的安全機(jī)制.可以消除軟件開發(fā)中的常見錯誤(如語法錯誤),。NET提供的垃圾回收器能夠幫助開發(fā)者有效地管理內(nèi)存資源。(5)兼容性。因?yàn)镃#遵循。NET的公共語言規(guī)范(CLS),從而能夠保證與其他語言開發(fā)組件的兼容.(6)靈活的版本處理技術(shù)。因?yàn)镃#語言本身內(nèi)置了版本控制功能,使開發(fā)人員更加容易地開發(fā)和維護(hù).(7)完善的錯誤、異常處理機(jī)制.C#提供了完善的錯誤和異常處理機(jī)制,使程序在交付應(yīng)用時(shí)能夠更加準(zhǔn)確。3技術(shù)分析3.1泛型本設(shè)計(jì)中使用了泛型技術(shù)。泛型是C#2。0中的一個新特性。通過泛型可以定義類型安全的數(shù)據(jù)類型,它的最顯著應(yīng)用就是創(chuàng)建集合類,可以約束集合類內(nèi)的元素類型.泛型有很多傳統(tǒng)集合沒有的特性,與傳統(tǒng)集合相比,它的類型更為安全,無須裝箱與拆箱的操作.泛型對于整個C#有很重要的意義.它的重要性主要體現(xiàn)在以下幾點(diǎn)。(1)解決了很多繁瑣的操作問題,例如傳統(tǒng)集合中獲取元素需要大量的類型轉(zhuǎn)換,不易控制程序的異常,而泛型集合無須這些類型的轉(zhuǎn)換,使我們編程更加便捷。(2)提供了更好的類型安全性。泛型對于類型的約束十分嚴(yán)格,它可以控制我們在集合中對于不同類型的對象的胡亂使用,從而保證程序類型的安全。(3)CLR可以支持泛型,這樣使得整個.NET平臺都能使用泛型.3.2簡單工廠設(shè)計(jì)模式簡單工廠模式是設(shè)計(jì)模式中的一種。軟件中的設(shè)計(jì)模式是軟件開發(fā)中對于某種需求的一種經(jīng)驗(yàn)的總結(jié),是特定問題經(jīng)過實(shí)踐檢驗(yàn)的特定解決方法。一般情況下就是根據(jù)參數(shù)數(shù)據(jù)返回一個適當(dāng)?shù)淖宇?,然后用基類或接口引用具體的對象,而不用考慮該實(shí)際對象的產(chǎn)生過程.在設(shè)計(jì)模式的簡單工廠模式中,簡單工廠也是用來生產(chǎn)“產(chǎn)品"的,在程序中也就是“對象.”在程序中的類FeedFactory就是一個簡單工廠,FeedFactory中的方法Creat(yī)eFeed()判斷Feed文件的格式后會實(shí)例化不同子類類型的頻道對象,然后將父類作為返回值,提供給工廠調(diào)用者。如果要增加其他的頻道類型,只需修改類FeedFactory,工廠的調(diào)用者無須任何改變這樣簡化了系統(tǒng)的維護(hù)。這樣做提高了代碼的效率,方便維護(hù).而且調(diào)用者也不需要知道所創(chuàng)建的實(shí)例對象屬于哪個子類。設(shè)計(jì)模式可以提高軟件的復(fù)用性,使得我們編寫的軟件更容易擴(kuò)展,更容易適合需求的變化,設(shè)計(jì)模式是面向?qū)ο笤趯?shí)際應(yīng)用的集中體現(xiàn)。3.3序列化與反序列化序列化是將對象的狀態(tài)存儲到特定存儲介質(zhì)的過程,也可以說是將對象狀態(tài)轉(zhuǎn)換為可保持或傳輸?shù)母袷降倪^程。在序列化過程中,會將對象的公有成員、私有成員包括類名,都轉(zhuǎn)換成數(shù)據(jù)流的形式,存儲到介質(zhì)中,這里說的存儲介質(zhì)通常指的是文件。在本設(shè)計(jì)中,通過序列化保存了Profile對象的信息,包括它存儲的頻道信息等..NET提供多種形式的序列化,文本或XMl流等。反序列化就是從特定存儲介質(zhì)(這里說的存儲介質(zhì)通常指的是文件)中,將數(shù)據(jù)重新構(gòu)建對象的過程。通過反序列化,可以將存儲在文件上的對象信息讀取,然后重新構(gòu)建為對象。這樣就不需要再將文件上的信息一一讀取、分析再組織為對象了。將對象的字段值保存到磁盤中,并在以后檢索此數(shù)據(jù).盡管不使用序列化也能完成這項(xiàng)工作,但這種方法通常很繁瑣,而且容易出錯。序列化提供了輕松實(shí)現(xiàn)這個目標(biāo)的快捷方法。通過序列化將對象從一個應(yīng)用程序發(fā)送到另一個應(yīng)用程序中。在遠(yuǎn)程通信中應(yīng)用非常廣泛,可以將應(yīng)用程序中的對象序列化,然后可以通過網(wǎng)絡(luò)通信,遠(yuǎn)程傳遞給其他地點(diǎn)的另一個應(yīng)用程序。4軟件設(shè)計(jì)4.1設(shè)計(jì)方案概述網(wǎng)絡(luò)用戶在客戶端借助于RSS的閱讀器(比如本設(shè)計(jì)的NewsReader閱讀器),在不打開各大新聞門戶網(wǎng)站的情況下,將網(wǎng)站提供的支持RSS輸出的網(wǎng)站內(nèi)容(新聞,Blog等)聚集到RSS閱讀器中.用戶可以不必登錄各個提供信息的網(wǎng)站,而通過RSS閱讀器來閱讀這些內(nèi)容.RSS閱讀器設(shè)計(jì)方案如下。設(shè)計(jì)圖如5-1(1)新聞發(fā)布者(我們這里認(rèn)為是各大新聞網(wǎng)站)會提供這種頻道訂閱點(diǎn),也就是Feed.為此設(shè)計(jì)相應(yīng)的方法讓閱讀器會解析這種Feed.(2)閱讀器接到Feed后,根據(jù)設(shè)計(jì)出的方法分析Feed文件后.把解析出的新聞標(biāo)題、鏈接內(nèi)容保存到集合中.(3)將解析出的已經(jīng)保存到集合中的內(nèi)容組織后,顯示到閱讀器顯示界面中,供用戶閱讀。(4)新聞的內(nèi)容會不斷的進(jìn)行更新,刷新Feed。用戶就能用閱讀器隨時(shí)能夠讀取到最新的文章了。新聞中心新聞中心訂閱到RSS閱讀器向閱讀提交頻道(Feed)閱讀器獲取頻道(Feed)獲取文章閱讀分析頻道(Feed)提供文章鏈接用戶閱讀圖5—1閱讀器設(shè)計(jì)圖4.2類的設(shè)計(jì)4。2。1文章類設(shè)計(jì)Article.cs文章類Article:它的屬性主要有文章的標(biāo)題和文章的鏈接地址。文章類Article詳細(xì)信息如圖5-2。5-2文章類Article詳細(xì)信息4.2。2頻道基類類設(shè)計(jì)FeedBase.cs頻道類(FeedBase類):是用來保存頻道信息的新聞訂閱點(diǎn)的基類。類FeedBase詳細(xì)信息如圖5—3.5-3類FeedBase詳細(xì)信息4.2。3頻道子類類設(shè)計(jì)RssFeed.cs頻道類(RssFeed類):用來保存RSS格式頻道信息的新聞訂閱點(diǎn)。類RssFeed詳細(xì)信息如圖5-4.5-4類RssFeed詳細(xì)信息4.2。4頻道子類類設(shè)計(jì)AtomFeed.cs頻道類(AtomFeed類):用來保存Atom格式頻道信息的新聞訂閱點(diǎn).類AtomFeed詳細(xì)信息如圖5—5.5—5類AtomFeed詳細(xì)信息4。2.5FeedFactory工廠類設(shè)計(jì)工廠類FeedFactory:自動辨別從網(wǎng)上獲得的Feed文件是Rss類型還是Atom類型。工廠類FeedFactory使用了簡單工廠模式.簡單工廠模式是設(shè)計(jì)模式中的一種。一般情況下就是根據(jù)參數(shù)數(shù)據(jù)返回一個適當(dāng)?shù)淖宇?然后用基類或接口引用具體的對象,而不用考慮該實(shí)際對象的產(chǎn)生過程。設(shè)計(jì)模式是得到了很好研究的范例,是一種經(jīng)驗(yàn)的總結(jié)。軟件中的設(shè)計(jì)模式是軟件開發(fā)中對于某種需求的一種經(jīng)驗(yàn)總結(jié),是特定問題經(jīng)過實(shí)踐檢驗(yàn)的特定解決方法.工廠類FeedFactory詳細(xì)信息如圖5—6.5-6工廠類FeedFactory詳細(xì)信息4.2.6Profile配置類設(shè)計(jì)配置類Profile:用來保存閱讀器中顯示的各個頻道的集合。配置類Profile詳細(xì)信息如圖5-7.5-7配置類Profile詳細(xì)信息4.2.7ProfileManger管理配置類類ProfileManger:用來管理配置信息的Profile類。ProfileManger管理配置類如圖5-8。5—8ProfileManger管理配置類詳細(xì)信息5詳細(xì)設(shè)計(jì)與編碼實(shí)現(xiàn)5.1類設(shè)計(jì)為了實(shí)現(xiàn)閱讀器的從網(wǎng)上抓取頻道鏈接、獲取文件、解析文件按文件格式的不同處理后都保存在閱讀器上的等功能,因此設(shè)計(jì)Article文章類,F(xiàn)eed(FeedBase,RssFeed,AtomFeed)頻道類,FeedFactory工廠類,Profile配置類,ProfileManger配置管理類。5.1.1文章類設(shè)計(jì)新聞閱讀器的主要對象是新聞,我們稱為文章。所以我們要創(chuàng)建一個文章類Article,它的屬性主要有文章的標(biāo)題和文章的鏈接地址。類Article主要內(nèi)容如下表6-1.表6-1類Article主要內(nèi)容屬性文章標(biāo)題Title文章鏈接Url類Article代碼如下:usingSystem;usingSystem.Collections。Generic;usingSystem.Text;namespaceNewsReader.Models{///<summary>///頻道中的文章類///〈/summary〉[Serializable]classArticle{publicArticle(){}publicArticle(stringtitle,stringurl){this。title=title;this。url=url;}///<summary〉///文章標(biāo)題///</summary〉privatestringtitle;publicstringTitle{get{returntitle;}set{title=value;}}///<summary>///文章鏈接///</summary〉privatestringurl;publicstringUrl{get{returnurl;}set{url=value;}}}}5。1。2頻道類設(shè)計(jì)閱讀器組織新聞(文章)的對象是頻道,我們稱為Feed。Feed是用來保存頻道信息的新聞訂閱點(diǎn)。一個頻道的主要信息大致可以歸納為頻道名稱,頻道鏈接,頻道的詳細(xì)說明,頻道的文章列表,還可以加入點(diǎn)擊次數(shù)。如下表6-2Feed類的主要內(nèi)容:表6—2Feed類的主要內(nèi)容屬性方法頻道名稱DisplayName填充文章列表鏈接地址Url重載構(gòu)造函數(shù)描述Description點(diǎn)擊次數(shù)Clicks很多大型的網(wǎng)站往往都會提供Rss+Atom兩種格式的頻道訂閱方式.這兩種格式既有相同的地方,也有不同點(diǎn).為了實(shí)現(xiàn)軟件的代碼復(fù)用,以提高程序的簡潔和高效。把這兩種格式相同的屬性(頻道名稱,鏈接地址,描述,點(diǎn)擊次數(shù))放入一個基類FeedBase中,把他們不同的屬性(獲取文章的方法)放入各自的類RssFees中和類AtomFeed中來實(shí)現(xiàn)。這三個類代碼請見附錄Ⅰ,關(guān)系圖6-3如下:圖6-3類FeedBase,類RssFeed和類AtomFeed的類關(guān)系圖5.1。3FeedFactory工廠類設(shè)計(jì)為了自動辨別從網(wǎng)上獲得的Feed文件是Rss類型還是Atom類型,創(chuàng)建一個類FeedFactory來解決這個問題.這涉及到了軟件開發(fā)中的簡單工廠設(shè)計(jì)模式.簡單工廠模式是設(shè)計(jì)模式中的一種。一般情況下就是根據(jù)參數(shù)數(shù)據(jù)返回一個適當(dāng)?shù)淖宇?然后用基類或接口引用具體的對象,而不用考慮該實(shí)際對象的產(chǎn)生過程。設(shè)計(jì)模式是得到了很好研究的范例,是一種經(jīng)驗(yàn)的總結(jié)。軟件中的設(shè)計(jì)模式是軟件開發(fā)中對于某種需求的一種經(jīng)驗(yàn)總結(jié),是特定問題經(jīng)過實(shí)踐檢驗(yàn)的特定解決方法。類FeedFactory類圖如下圖圖6-4類FeedFactory類圖FeedFactory的代碼:usingSystem;usingSystem。Collections。Generic;usingSystem.Text;usingSystem.Net;usingSystem.Xml;namespaceNewsReader.Models{///<summary>///Feed的簡單工廠用來控制不同Feed的構(gòu)建///</summary>classFeedFactory{publicFeedFactory(){}publicstaticFeedBaseCreat(yī)eFeed(stringtitle,stringurl,stringdesc){FeedBaseret;//定義一個Feed基類try{//下載Feed文件WebClientmyClient=newWebClient();myClient。DownloadFile(url,”unknown.feed");//讀取未知文件XmlDocumentmyXml=newXmlDocument();myXml.Load("unknown.feed”);XmlNoderootNode=myXml。DocumentElement;//讀取根節(jié)點(diǎn)//根據(jù)節(jié)點(diǎn)值的不同,判斷類型switch(rootNode。Name.ToLower()){//判斷后創(chuàng)建相應(yīng)的類型case"rss":ret=newRssFeed(title,url,desc);//父類保存子類對象break;case”feed”:ret=newAtomFeed(title,url,desc);//父類保存子類對象break;default:ret=null;break;}returnret;//返回一個父類}catch(Exception){thrownewException();}}}}在簡單工廠設(shè)計(jì)模式這個方法中有兩個重要的特征:(1)返回類型是父類。(2)方法中根據(jù)情況的不同創(chuàng)建不同類型的子類對象,將子類對象用父類保存,然后返回父類.類FeedFactory就是一個簡單工廠,FeedFactory中方法CreateFeed()判斷Feed文件的格式后會實(shí)例化不同子類類型的頻道對象,然后將父類作為返回值,提供給工廠調(diào)用者。5.1.4Profile配置類設(shè)計(jì)類Profile用來保存閱讀器中顯示的各個頻道的集合。類Profile的類圖如下圖6—5:圖6-5類Profile的類圖類Profile代碼如下:usingSystem;usingSystem。Collections。Generic;usingSystem.Text;namespaceNewsReader。Models{[Serializable]classProfile{publicProfile(){}publicList<FeedBase>Feeds=newList<FeedBase>();}}5.1.5ProfileManger管理配置類類ProfileManger用來管理配置信息的Profile類。圖6-6ProfileManger管理配置類類圖ProfileManger管理配置類代碼如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Collections;usingSystem.Text;usingSystem.Runtime.Serialization.Formatters。Soap;usingSystem.Runtime.Serialization.Formatters.Binary;usingSystem.IO;namespaceNewsReader.Models{classProfileManager{publicProfileProfile=newProfile();publicProfileManager(){}internalProfileProfile1{get{thrownewSystem.NotImplementedException();}set{}}publicvoidChannelReset(){Profile.Feeds.Clear();}///〈summary〉///序列化方式保存Profile對象///〈/summary>publicvoidSave(){FileStreamfileStream=null;try{fileStream=newFileStream(”profile。bin",FileMode。Create);//定義一個文件流BinaryFormat(yī)terbf=newBinaryFormat(yī)ter();//二進(jìn)制方式bf。Serialize(fileStream,Profile);//序列化保存配置文件對象Profile}catch(Exception){throw;}finally{fileStream.Close();}}///<summary〉///反序列化將本地信息轉(zhuǎn)為Profile///〈/summary>publicvoidLoad(){FileStreamfileStream=null;try{fileStream=newFileStream("profile。bin",F(xiàn)ileMode。Open);BinaryFormatterbf=newBinaryFormatter();Profile=(Profile)bf.Deserialize(fileStream);}catch(Exception){ChannelReset();}finally{if(fileStream!=null)fileStream。Close();}}}}類ProfileManger中的ChannelReset()方法用于重置頻道信息(如程序首次運(yùn)行未找到用戶的配置文件時(shí),或者讀取配置文件發(fā)生錯誤時(shí)將調(diào)用此方法.。)Load()方法用于讀取配置文件,Save()方法用于保存配置文件。在類ProfileManger中通過序列化保存了Profile對象的信息,包括它存儲的頻道信息。。net提供了多種形式的序列化,文本或XML流等。目前使用二進(jìn)制對泛型支持得最好。在類ProfileManger中也通過反序列化將存儲在文件上的對象Profile的信息讀取出來,然后重新構(gòu)建為對象。這樣就不需要我們將文件上的信息一一讀取,分析在組織為對象了。5.2閱讀器界面設(shè)計(jì)5.2.1主界面設(shè)計(jì)在NewsReader中需設(shè)計(jì)界面,界面有復(fù)雜的也有簡單的,如圖6-7是程序的主界面,集中要用到很多的控件,要用到MenuStrip,TreeView,PictureBox,TabControl,Time,WebBrowser等控件。圖6-7是程序的主界面5.2.2子界面設(shè)計(jì)在NewsReader中,其中有設(shè)計(jì)查看(ChannelInfoViewForm),修改(ChannelInfoModifyForm),增加(ChannelInfoModifyForm)3個窗體界面。這三個窗體包含的內(nèi)容有很多相同的,因此設(shè)計(jì)一個ChannelInfoFormBase窗體.它里面包含“查看”,“修改",“增加”3個窗體的公共部分。然后分別再創(chuàng)建“查看”,“修改”,“增加”這3個不同的窗體都繼承ChannelInfoFormBase窗體。通過繼承,有效的保持了界面的一致性和減少了代碼。由于這三個窗體中的“確定”按鈕的功能不同,所以每個窗體的“確定"按鈕的功能要在各自的窗體中實(shí)現(xiàn)。下面圖是ChannelInfoFormBase窗體界面,由于查看窗體(ChannelInfoViewForm),修改窗體(ChannelInfoModifyForm),增加窗體(ChannelInfoModifyForm)繼承自ChannelInfoFormBase窗體,界面基本是一樣的。ChannelInfoFormBase窗體界面的圖如6-8,查看窗體(ChannelInfoViewForm)窗體界面的圖如6-9,增加窗體(ChannelInfoModifyForm)窗體界面的圖如6—10:圖6—8ChannelInfoFormBase窗體界面圖6—9ChannelInfoViewForm窗體界面圖6—10ChannelInfoModifyForm窗體界面5。3數(shù)據(jù)顯示為了把存儲在頻道集合中的頻道顯示在窗體上,就要利用TreeView控件,這種控件用于在windows窗體上顯示樹形結(jié)構(gòu)。TreeView是通過節(jié)點(diǎn)來表示數(shù)據(jù)的,TreeView的Nodes對象表示它的節(jié)點(diǎn)集合,TreeView的節(jié)點(diǎn)對象是TreeNode。為了讓NewsReader更新所有頻道列表,或用右鍵指定更新一個頻道的新聞。TreeView控件在程序中如圖6—11。圖6-11TreeView控件界面代碼如下:internalvoidUpdateFeedsView(){tvLiveBookmark。BeginUpdate();tvLiveBookmark。Nodes.Clear();foreach(FeedBasefeedinpm。Profile.Feeds){TreeNodefeedNode=newTreeNode(feed.DisplayName);feedNode.ContextMenuStrip=this.cmsFeeds;//設(shè)置每個節(jié)點(diǎn)的右鍵菜單tvLiveBookmark.Nodes。Add(feedNode);if(feed。Articles!=null){foreach(Articleatclinfeed.Articles.Values){TreeNodeat(yī)clNode;at(yī)clNode=feedNode.Nodes。Add(atcl.Title);}}}tvLiveBookmark.EndUpdat(yī)e();}//獲取指定頻道最新文章列表privat(yī)evoidcmstsmiFetchArticles_Click(objectsender,EventArgse){TreeNodenode=tvLiveBookmark。SelectedNode;//獲取當(dāng)前節(jié)點(diǎn)選中的節(jié)點(diǎn)if(node==null)return;//判斷當(dāng)前節(jié)點(diǎn)是否為空if(node.Level?。剑?return;//判斷當(dāng)前節(jié)點(diǎn)是否是頻道節(jié)點(diǎn)this.Cursor=Cursors。WaitCursor;//設(shè)置等待光標(biāo)//取得指定頻道新聞中的文章if(pm.Profile.Feeds[node。Index]。FetchArticles()){UpdateArticlesView(node.Index);//調(diào)用更新指定頻道的方法}this.Cursor=Cursors。Arrow;}//更新指定的頻道文章到TreeView中privatevoidUpdateArticlesView(intfeedIndex){tvLiveBookmark。BeginUpdat(yī)e();//禁止樹視圖重繪tvLiveBookmark.Nodes[feedIndex].Nodes.Clear();//將當(dāng)前右鍵選中的頻道列表清空//遍歷當(dāng)前頻道中的新聞foreach(Articleat(yī)clinpm。Profile。Feeds[feedIndex].Articles。Values){TreeNodenode;node=tvLiveBookmark.Nodes[feedIn

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論