創(chuàng)建多界面的應(yīng)用程序
提前設(shè)計(jì)應(yīng)用程序,使其滿足用戶對(duì)不只一個(gè)界面的需求。 by Robert Ericsson and Jason Cline 涉及技術(shù):.NET Framework, ASP.NET, Windows Froms, .NET Compact Framework, Mobile Internet Toolkit
下載本文代碼(http://www.fawcette.com/China/DotNetMagazine/2002_12/code/nm0212re.zip) 對(duì)于你們開發(fā)小組開發(fā)的軟件,你可能想給用戶提供最佳的用戶界面,這就意味著你需要不只一個(gè)界面。用戶希望可以在任何時(shí)候、任何地點(diǎn)、在各種設(shè)備上訪問信息。這就形成了人們對(duì)靈活界面的需求,而且使應(yīng)用程序的基本原理和用戶界面的設(shè)計(jì)和創(chuàng)建顯得更為重要了。在本篇文章中,我們將講述一些用來定義、設(shè)計(jì)、構(gòu)建和測(cè)試支持.NET多個(gè)用戶界面的應(yīng)用程序的最好的方法。我們的探討只局限于現(xiàn)有的以及很快會(huì)實(shí)現(xiàn)的用于.NET平臺(tái)的開發(fā)技術(shù)。然而,如果你們的開發(fā)團(tuán)隊(duì)已經(jīng)創(chuàng)建了一個(gè)Java前端系統(tǒng),并通過.NET Web services來運(yùn)行一個(gè)服務(wù)器端應(yīng)用程序的話,這些方法也同樣適用。 在Rob Ericsson的“為好的UI 選擇合適的工具”(http://www.fawcette.com/China/XmlFile.aspx?ID=25)一文中,他講述了應(yīng)用程序的一些特點(diǎn),可以幫你選擇是用Windows Forms還是用ASP.NET來實(shí)現(xiàn)一個(gè)應(yīng)用程序。這種選擇的要點(diǎn)就是要對(duì)每種技術(shù)進(jìn)行成本效益分析,將應(yīng)用程序的可用性作為一個(gè)最重要的因素來考慮。然而,這通常并不是一個(gè)簡(jiǎn)單的二選一的問題。有時(shí)侯,一個(gè)應(yīng)用程序有很多不同的用戶群。所以,用戶的需求以及他們對(duì)用戶界面的需求會(huì)有很大的差別就不足為奇了。對(duì)于這種類型的應(yīng)用程序,“一刀切”(one-size-fits-all)式的Windows Forms或ASP.NET實(shí)現(xiàn)方式可能就不太適合了。 在這種情況下,你應(yīng)該考慮創(chuàng)建一個(gè)可以提供多個(gè)用戶界面的應(yīng)用程序。對(duì)于這種具有多個(gè)界面的應(yīng)用程序,我們可以將Microsoft Exchange Server作為例子來講述:Outlook是Windows客戶端,Outlook Web Access (OWA)是基于Web的界面。你臨時(shí)不在辦公室時(shí)使用OWA是很理想的,而Outlook Windows客戶端是設(shè)計(jì)用于大量的日常工作的。然而,不同的界面并沒有必要用不同的技術(shù)來構(gòu)建。讓我們來看一個(gè)客戶服務(wù)中心的應(yīng)用程序。客戶服務(wù)電話接線員運(yùn)用的數(shù)據(jù)錄入界面同用來管理應(yīng)用程序的界面有很大的不同,雖然它們都是用Windows Forms構(gòu)建的。實(shí)際上,運(yùn)用相同的界面技術(shù)來創(chuàng)建兩個(gè)不同的界面比將多個(gè)界面技術(shù)整合到一個(gè)應(yīng)用程序中要簡(jiǎn)單得多。 認(rèn)可困難 雖然一些工具供應(yīng)商認(rèn)為創(chuàng)建具有多個(gè)用戶界面的應(yīng)用程序很簡(jiǎn)單,但事實(shí)并非如此。很多時(shí)候,創(chuàng)建一個(gè)Web或PDA應(yīng)用程序所帶來的興奮感都會(huì)讓開發(fā)人員失去理智,從而不去考慮Windows應(yīng)用程序是否對(duì)用戶更有效。另外添加一個(gè)界面會(huì)給你的應(yīng)用程序帶來許多復(fù)雜的問題,所以不要輕易作出這樣的決定。為了幫助你決定是否給你的應(yīng)用程序采用多個(gè)用戶界面,你應(yīng)該問自己這樣幾個(gè)問題。 第一,用戶不在辦公室時(shí)需要訪問你的應(yīng)用程序嗎?對(duì)遠(yuǎn)程用戶的支持是提供多個(gè)界面的主要原因。在許多情況下,這些用戶確實(shí)需要一個(gè)單獨(dú)的界面來運(yùn)用應(yīng)用程序。用戶在一個(gè)擁擠的飛機(jī)場(chǎng)和在一個(gè)安靜的辦公室所使用的環(huán)境是完全不同的。 第二,你的應(yīng)用程序需要在不同的平臺(tái)上運(yùn)行嗎?因?yàn)?NET目前不提供跨平臺(tái)的互用性,所以如果你的需求包括在非Windows操作系統(tǒng)上運(yùn)行應(yīng)用程序,那么你就應(yīng)該創(chuàng)建一個(gè)ASP.NET應(yīng)用程序,使用戶可以從多個(gè)Web瀏覽器訪問它(見工具條“.NET正走向成功”)。如果你運(yùn)用Microsoft Mobile Internet Toolkit,所支持的Web瀏覽器可以包括那些在Palm OS PDAs和手機(jī)上運(yùn)行的瀏覽器。 最后,你有需求截然不同的用戶群?jiǎn)幔吭谥珠_發(fā)應(yīng)用程序前,仔細(xì)考慮這些問題是很值得的,否則會(huì)造成相當(dāng)大的麻煩并給應(yīng)用程序帶來風(fēng)險(xiǎn)。只有當(dāng)你確信你的應(yīng)用程序用戶的確需要多個(gè)界面時(shí),你才可以投資來構(gòu)建它們。 選擇你的技術(shù) 一旦你決定構(gòu)建一個(gè)具有多個(gè)界面的應(yīng)用程序,你就需要確定運(yùn)用哪種技術(shù)。.NET提供了許多用戶界面選項(xiàng),要對(duì)創(chuàng)建一個(gè)具有多個(gè)界面的.NET應(yīng)用程序作出合理的選擇,你就必須充分了解.NET相關(guān)的界面技術(shù)。 Windows Forms是在.NET中開發(fā)富客戶端(rich client)應(yīng)用程序的基礎(chǔ)。客戶端應(yīng)用程序比其相應(yīng)的基于瀏覽器的應(yīng)用程序有一些固有的優(yōu)勢(shì)。用戶可以運(yùn)用客戶端應(yīng)用程序,而不需要網(wǎng)絡(luò)連接。雖然在辦公環(huán)境中網(wǎng)絡(luò)已經(jīng)無處不在了(尤其是隨著諸如802.11這樣的無線網(wǎng)絡(luò)技術(shù)的普及),但在不能利用網(wǎng)絡(luò)連接的情況下,用戶仍需要很多應(yīng)用程序。例如,他們可能需要在家運(yùn)用一個(gè)應(yīng)用程序,在這種情況下,只有很少數(shù)的用戶有寬帶連接;或者需要在車間運(yùn)用應(yīng)用程序,這時(shí)候由于電磁干擾而不能進(jìn)行網(wǎng)絡(luò)連接;或者在乘飛機(jī)旅行時(shí)。除了提供離線功能外,客戶端應(yīng)用程序也可以充分利用Windows的特殊功能,而基于瀏覽器的應(yīng)用程序只能運(yùn)用Windows“最低標(biāo)準(zhǔn)”的功能。 Windows Forms是Microsoft Foundation Classes(MFC)的“指定繼承人”,它是Win32 API用戶界面庫的首選對(duì)象封裝器(object wrapper),但是MFC和Windows Forms之間有許多不同。嚴(yán)格地說,MFC是個(gè)C++類的模式,而任何.NET語言都可以訪問Windows Forms的類。另外,類的模式的靈活性和可用性都有了很多改進(jìn)。由于MFC本質(zhì)上是Win32上的一個(gè)thin wrapper,所以它有很多不一致性,而且很難學(xué)習(xí)并有效運(yùn)用。Windows Forms類的模式是經(jīng)過了改進(jìn)的,一致的,它的學(xué)習(xí)曲線類似于Visual Basic的學(xué)習(xí)曲線,而且有更多的功能。運(yùn)用Windows Forms,我們可以完成任何通過直接寫到Win32類庫來完成的任務(wù)。如果你需要擴(kuò)展類來支持你的應(yīng)用程序的一個(gè)特殊的用戶界面,你可以通過繼承Windows Forms的類來實(shí)現(xiàn)。 運(yùn)用MFC或Visual Basic創(chuàng)建客戶端應(yīng)用程序的一個(gè)最大的缺點(diǎn)就是發(fā)布應(yīng)用程序和所有必需的DLLs很困難。客戶端應(yīng)用程序的安裝步驟通常很復(fù)雜,而且可能很麻煩。Windows Forms的智能客戶端使我們可以在開發(fā)應(yīng)用程序時(shí)將富客戶端的強(qiáng)大性和靈活性與基于瀏覽器的應(yīng)用程序容易發(fā)布的特點(diǎn)結(jié)合起來。 ASP.NET是在.NET中創(chuàng)建基于Web的應(yīng)用程序的重要技術(shù)。近幾年來,基于Web的應(yīng)用程序已經(jīng)超越了簡(jiǎn)單的數(shù)據(jù)庫存取前端系統(tǒng)的范圍,它包括許多不同的應(yīng)用。基于Web的應(yīng)用程序?qū)蛻舳说南拗品浅5停@就是它們很受歡迎的一個(gè)原因。任何可以通過網(wǎng)絡(luò)訪問Web服務(wù)器的機(jī)器都可以運(yùn)用一個(gè)將符合標(biāo)準(zhǔn)的HTML發(fā)送到瀏覽器的應(yīng)用程序。在界面功能上你需要考慮這種功能,使用戶可以在任何Web瀏覽器上訪問一個(gè)應(yīng)用程序,但是對(duì)于許多應(yīng)用程序來說,固有的HTML標(biāo)簽提供的基本的用戶界面部件就足夠創(chuàng)建一個(gè)可用的界面了。 除了可以創(chuàng)建基于HTML的應(yīng)用程序外,ASP.NET也使創(chuàng)建基于SOAP(Simple Object Access Protocol)的Web services變得非常容易了。在一個(gè)客戶端應(yīng)用程序中使用一個(gè)Web services也很簡(jiǎn)單。因?yàn)橥ㄟ^運(yùn)用.NET的SOAP可以很容易地創(chuàng)建客戶端/服務(wù)器應(yīng)用程序,所以在你的應(yīng)用程序中提供多個(gè)界面就變得更容易了。將Web services同富客戶端結(jié)合起來就可以讓用戶享有Web應(yīng)用程序和富客戶端的好處,從而彌補(bǔ)了它們各自的不足。 你在考慮PDA用戶界面時(shí)會(huì)有新的想法。雖然對(duì)PDAs的大肆宣傳已經(jīng)減少了,但它們?nèi)源砹擞脩粼L問社團(tuán)信息的一種方式。Gartner Dataquest預(yù)言在2002年會(huì)生產(chǎn)1550萬PDAs。由于PDA的屏幕更小、輸入技術(shù)有限以及典型的使用環(huán)境,所以對(duì)PDA界面的需求同對(duì)一個(gè)Windows或Web應(yīng)用程序的需求有很大的不同。 因?yàn)闉镻DA設(shè)計(jì)可用的應(yīng)用程序與Windows或Web應(yīng)用程序的開發(fā)截然不同,所以.NET提供了工具以簡(jiǎn)化該步驟。Visual Studio .NET的Smart Device Extensions可以讓開發(fā)人員運(yùn)用.NET 工具(他們已經(jīng)很熟悉了)來創(chuàng)建.NET Compact Framework應(yīng)用程序。.NET Compact Framework是.NET Framework的一個(gè)子集,它在資源受到限制的(resource-constrained)設(shè)備上運(yùn)行,如Pocket PC PDAs、智能電話和其它運(yùn)行Windows CE .NET的設(shè)備。 .NET Compact Framework提供了必要的工具來創(chuàng)建可用的應(yīng)用程序,包括客戶端對(duì)Web services的訪問、ADO.NET、加密、適當(dāng)?shù)睦L圖和窗體功能。除了只在Pocket PC設(shè)備上運(yùn)行的.NET Compact Framework外,.NET也具有Microsoft Mobile Internet Toolkit(MIT)的特點(diǎn)。這個(gè)ASP.NET的擴(kuò)展功能可以讓開發(fā)人員在各種設(shè)備上創(chuàng)建Web應(yīng)用程序,包括支持WAP的手機(jī)和大多數(shù)運(yùn)行Palm OS的PDAs。它包含一組服務(wù)器端的控件,為列表、命令、通話、日歷等提供用戶界面元素。控件根據(jù)訪問設(shè)備自動(dòng)提供適當(dāng)?shù)臉?biāo)識(shí)語言(HTML、WML、cHTML)。這就可以讓你把精力集中到應(yīng)用程序邏輯的開發(fā)和用戶回饋上,而MIT則負(fù)責(zé)無線開發(fā)的細(xì)節(jié)。 付諸實(shí)施 .NET提供了許多用戶界面技術(shù)。為了有助于你了解如何運(yùn)用它們,我們創(chuàng)建了一個(gè)樣例應(yīng)用程序,它有兩個(gè)界面:一個(gè)Windows Forms客戶端和一個(gè)ASP.NET客戶端。樣例是個(gè)時(shí)間跟蹤和項(xiàng)目管理應(yīng)用程序,是為一個(gè)專門的服務(wù)公司開發(fā)的,用來跟蹤客戶項(xiàng)目所花的時(shí)間。該應(yīng)用程序有明顯的需求不同的用戶群,可以很好地說明多用戶界面的應(yīng)用。 在定義時(shí)間跟蹤應(yīng)用程序的根本的需求時(shí),我們確定了四種不同的用戶群:項(xiàng)目經(jīng)理、顧問經(jīng)理、顧問和訂約人。前兩種用戶需要數(shù)據(jù)輸入和報(bào)表分析的功能,而后兩種用戶只需要數(shù)據(jù)輸入和遠(yuǎn)程訪問功能。因?yàn)檫@些用戶群的需求不同,所以我們把應(yīng)用程序分成兩個(gè)界面:一個(gè)用于管理和分析的Windows Forms應(yīng)用程序,和一個(gè)用于數(shù)據(jù)輸入和遠(yuǎn)程訪問的ASP.NET Web Forms應(yīng)用程序。 花時(shí)間了解應(yīng)用程序的不同用戶群的需求是很有價(jià)值的,而這個(gè)步驟經(jīng)常被人們忽視(見工具條“建立可用性需求”)。在著手設(shè)計(jì)應(yīng)用程序時(shí)了解用戶群的需求可以使你的程序的重用性達(dá)到最大,還可以避免產(chǎn)品開發(fā)中的重復(fù)勞動(dòng)。因?yàn)槲覀冊(cè)谠O(shè)計(jì)應(yīng)用程序時(shí)有了這樣的了解,所以我們就可以用ASP.NET Web services了,并可以構(gòu)建一個(gè)支持多個(gè)用戶界面平臺(tái)的簡(jiǎn)單而有效的應(yīng)用程序。 集中的、跨平臺(tái)的商業(yè)邏輯的一個(gè)危險(xiǎn)就是在所有用戶界面平臺(tái)上實(shí)現(xiàn)該商業(yè)邏輯提供的全部功能。重要的一點(diǎn)是,我們應(yīng)該關(guān)注個(gè)別界面的需求,不要因?yàn)榭梢缘玫侥撤N商業(yè)邏輯提供的功能就去實(shí)現(xiàn)它。恰當(dāng)?shù)淖龇ㄊ且私饽愕挠脩羧翰⑹冀K考慮他們的需求。 根據(jù)我們創(chuàng)建.NET應(yīng)用程序的經(jīng)驗(yàn),我們已經(jīng)掌握了一些有用的東西,在此我們將分享給你。軟件開發(fā)中最大的挑戰(zhàn)之一就是收集并記錄需求。你努力去解決的問題(需求)往往會(huì)和那個(gè)問題的建議性解決方案(設(shè)計(jì))混淆在一起。基本的用例可以幫你分辨需求和設(shè)計(jì)(見資源)。將基本用例與具體用例進(jìn)行比較,你會(huì)發(fā)現(xiàn)具體用例中說明了用戶和一個(gè)特殊界面之間的實(shí)際交互。當(dāng)你編寫一個(gè)具體用例時(shí),你已經(jīng)創(chuàng)建了(至少是含蓄地)用戶界面。這種不成熟的界面設(shè)計(jì)可能在以后的開發(fā)周期中造成許多問題,尤其是如果你在你的應(yīng)用程序中用了多個(gè)界面的話。如果用例指定了一個(gè)具體的依賴于特殊的Windows控件的交互層,那么當(dāng)交互媒介發(fā)生改變時(shí),你就必須修改需求。這就會(huì)導(dǎo)致需求的脆弱性,它會(huì)阻止正常的設(shè)計(jì)進(jìn)程并延遲開發(fā)。 仔細(xì)設(shè)計(jì)商業(yè)邏輯 在確定需求時(shí),除了要非常注意細(xì)節(jié)外,我們發(fā)現(xiàn)仔細(xì)設(shè)計(jì)商業(yè)邏輯層尤為重要。最重要的是,如果你打算運(yùn)用Web services,你就需要注意管理串行化和傳送域?qū)ο蟮拿浇榈木窒扌浴TO(shè)計(jì)和構(gòu)建適當(dāng)?shù)腤eb services是該問題的關(guān)鍵:這個(gè)問題解決得好就可以讓你在.NET中更容易地運(yùn)用多個(gè)界面。雖然Web services伴隨有許多夸張的宣傳,但在多個(gè)界面設(shè)計(jì)方面,它們的靈活性確實(shí)是不可比擬的。 你也需要了解你的應(yīng)用程序?qū)⒊尸F(xiàn)的界面的相關(guān)的技術(shù)細(xì)節(jié)。例如,客戶端技術(shù)如何處理狀態(tài)?雖然ASP.NET為Web應(yīng)用程序簡(jiǎn)化了狀態(tài)處理,但如果你的應(yīng)用程序?qū)⒂幸粋(gè)Web界面時(shí),這仍然是個(gè)需要考慮的問題。因?yàn)閃eb依賴于無狀態(tài)的HTTP協(xié)議進(jìn)行通訊,因此確定如何跟蹤一個(gè)用戶在應(yīng)用程序的位置這一負(fù)擔(dān)就落在了應(yīng)用程序開發(fā)人員的身上。在ASP.NET中跟蹤狀態(tài)比用以前的技術(shù)跟蹤狀態(tài)要容易很多,但你仍需要確定在你的應(yīng)用程序中如何跟蹤并運(yùn)用狀態(tài)信息。在設(shè)計(jì)應(yīng)用程序時(shí)考慮其它問題(包括數(shù)據(jù)結(jié)構(gòu)和持久性)也是很重要的。HTTP本身不支持傳送和保持?jǐn)?shù)據(jù)結(jié)構(gòu)(同保持狀態(tài)的問題類似),所以你必須確定如何在你的應(yīng)用程序中實(shí)現(xiàn)它們。幸運(yùn)的是,ASP.NET的易于使用的SOAP實(shí)現(xiàn)方式可以幫你解決這個(gè)問題。 忽視可用性是你在多界面應(yīng)用程序中可能犯的最大的一個(gè)錯(cuò)誤。對(duì)功能加以限定是種很好的方法:越少越好。在一個(gè)界面載入過多的功能會(huì)變得很混亂,而且很難使用。如果你遵循Bauhaus的設(shè)計(jì)格言——形式追隨功能,那么就會(huì)得到更好的結(jié)果。了解你的應(yīng)用程序可以提供的功能以及用戶如何使用那些功能對(duì)于創(chuàng)建一個(gè)可用的應(yīng)用程序來說是很必要的。這可能意味著,每個(gè)平臺(tái)的界面根據(jù)那類用戶期望的功能的不同而有很大的不同。 在樣例應(yīng)用程序中,Web和Windows Forms界面明顯不同,因?yàn)槲覀冇胁煌挠脩羧海麄兊氖褂媚J讲煌_\(yùn)用該應(yīng)用程序的顧問對(duì)創(chuàng)建漂亮的報(bào)表不感興趣;他們只想根據(jù)項(xiàng)目記錄時(shí)間。給他們提供“額外”的報(bào)表分析功能可能是個(gè)好主意,但是最小限度地增加復(fù)雜性都會(huì)造成應(yīng)用程序總成本的增加。如果顧問們需要額外的報(bào)表功能,那么我們應(yīng)該一步步地收集需求并構(gòu)建該功能。 先測(cè)試最重要的UI 有時(shí)侯你可能不需要多個(gè)界面,你可以通過先測(cè)試最重要的界面來確定這一點(diǎn)。例如,如果應(yīng)用程序的主要用戶是內(nèi)部Windows桌面用戶,你可能認(rèn)為智能客戶端界面是最重要的。另一方面,如果主要用戶是一群移動(dòng)用戶,你可能選.NET Compact Framework界面。不管你選擇哪個(gè)界面,你應(yīng)該首先創(chuàng)建這個(gè)最重要的界面,對(duì)它進(jìn)行測(cè)試來看看你是否真的需要提供另外的界面。這就可以讓你有機(jī)會(huì)仔細(xì)關(guān)注應(yīng)用程序商業(yè)邏輯,并確信它是否非常穩(wěn)固。通過一些可用性測(cè)試,你可能發(fā)現(xiàn)Web界面“需求”是不需要的,如果你有一個(gè)設(shè)計(jì)良好的Windows Forms智能客戶端應(yīng)用程序的話。如果測(cè)試表明你需要多個(gè)界面,你可以從最先發(fā)布的界面收集用戶反饋,它們可以用來改進(jìn)未來界面的設(shè)計(jì)。 .NET Framework提供了很多技術(shù)可以使創(chuàng)建多個(gè)用戶界面的工作變得簡(jiǎn)單。然而,在創(chuàng)建有效的用戶界面方面并沒有什么“尚方寶劍”。不管你用什么工具,仍然會(huì)有可用性這個(gè)基本問題:需要對(duì)用戶群及其用戶有所了解。一旦你了解了這些,你的開發(fā)小組就需要設(shè)計(jì)一個(gè)用戶界面使用戶可以更有效地執(zhí)行他們的任務(wù)了。最后,開發(fā)小組需要測(cè)試這個(gè)用戶界面,確信它確實(shí)是個(gè)有效的解決方案。 多個(gè)用戶群對(duì)一個(gè)應(yīng)用程序的界面需求會(huì)截然不同,這種情況會(huì)越來越多,你可以利用.NET工具來創(chuàng)建你需要的界面。Windows Forms為Windows用戶提供強(qiáng)大的、智能客戶端功能,而ASP.NET可以使開發(fā)人員創(chuàng)建強(qiáng)大的Web應(yīng)用程序;.NET Compact Framework和MIT可以讓你創(chuàng)建靈活的PDA和手機(jī)用戶界面。了解你可以運(yùn)用的工具以及用戶的需求是用.NET構(gòu)建成功的用戶界面的關(guān)鍵。 關(guān)于作者:Robert Ericsson是位經(jīng)驗(yàn)豐富的軟件開發(fā)人員和項(xiàng)目經(jīng)理,他主要致力于Microsoft技術(shù)的研究。Jason Cline是位軟件工程師,專門從事.NET Framework的研究。你可以通過dotnet@l10systems.com
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!