提前設計應用程序,使其滿足用戶對不只一個界面的需求。 by robert ericsson and jason cline 涉及技術:.net framework, asp.net, windows froms, .net compact framework, mobile internet toolkit
下載本文代碼(http://www.fawcette.com/china/dotnetmagazine/2002_12/code/nm0212re.zip) 對于你們開發小組開發的軟件,你可能想給用戶提供最佳的用戶界面,這就意味著你需要不只一個界面。用戶希望可以在任何時候、任何地點、在各種設備上訪問信息。這就形成了人們對靈活界面的需求,而且使應用程序的基本原理和用戶界面的設計和創建顯得更為重要了。在本篇文章中,我們將講述一些用來定義、設計、構建和測試支持.net多個用戶界面的應用程序的最好的方法。我們的探討只局限于現有的以及很快會實現的用于.net平臺的開發技術。然而,如果你們的開發團隊已經創建了一個java前端系統,并通過.net web services來運行一個服務器端應用程序的話,這些方法也同樣適用。 在rob ericsson的“為好的ui 選擇合適的工具”(http://www.fawcette.com/china/xmlfile.aspx?id=25)一文中,他講述了應用程序的一些特點,可以幫你選擇是用windows forms還是用asp.net來實現一個應用程序。這種選擇的要點就是要對每種技術進行成本效益分析,將應用程序的可用性作為一個最重要的因素來考慮。然而,這通常并不是一個簡單的二選一的問題。有時侯,一個應用程序有很多不同的用戶群。所以,用戶的需求以及他們對用戶界面的需求會有很大的差別就不足為奇了。對于這種類型的應用程序,“一刀切”(one-size-fits-all)式的windows forms或asp.net實現方式可能就不太適合了。 在這種情況下,你應該考慮創建一個可以提供多個用戶界面的應用程序。對于這種具有多個界面的應用程序,我們可以將microsoft exchange server作為例子來講述:outlook是windows客戶端,outlook web access (owa)是基于web的界面。你臨時不在辦公室時使用owa是很理想的,而outlook windows客戶端是設計用于大量的日常工作的。然而,不同的界面并沒有必要用不同的技術來構建。讓我們來看一個客戶服務中心的應用程序??蛻舴针娫捊泳€員運用的數據錄入界面同用來管理應用程序的界面有很大的不同,雖然它們都是用windows forms構建的。實際上,運用相同的界面技術來創建兩個不同的界面比將多個界面技術整合到一個應用程序中要簡單得多。 認可困難 雖然一些工具供應商認為創建具有多個用戶界面的應用程序很簡單,但事實并非如此。很多時候,創建一個web或pda應用程序所帶來的興奮感都會讓開發人員失去理智,從而不去考慮windows應用程序是否對用戶更有效。另外添加一個界面會給你的應用程序帶來許多復雜的問題,所以不要輕易作出這樣的決定。為了幫助你決定是否給你的應用程序采用多個用戶界面,你應該問自己這樣幾個問題。 第一,用戶不在辦公室時需要訪問你的應用程序嗎?對遠程用戶的支持是提供多個界面的主要原因。在許多情況下,這些用戶確實需要一個單獨的界面來運用應用程序。用戶在一個擁擠的飛機場和在一個安靜的辦公室所使用的環境是完全不同的。 第二,你的應用程序需要在不同的平臺上運行嗎?因為.net目前不提供跨平臺的互用性,所以如果你的需求包括在非windows操作系統上運行應用程序,那么你就應該創建一個asp.net應用程序,使用戶可以從多個web瀏覽器訪問它(見工具條“.net正走向成功”)。如果你運用microsoft mobile internet toolkit,所支持的web瀏覽器可以包括那些在palm os pdas和手機上運行的瀏覽器。 最后,你有需求截然不同的用戶群嗎?在著手開發應用程序前,仔細考慮這些問題是很值得的,否則會造成相當大的麻煩并給應用程序帶來風險。只有當你確信你的應用程序用戶的確需要多個界面時,你才可以投資來構建它們。 選擇你的技術 一旦你決定構建一個具有多個界面的應用程序,你就需要確定運用哪種技術。.net提供了許多用戶界面選項,要對創建一個具有多個界面的.net應用程序作出合理的選擇,你就必須充分了解.net相關的界面技術。 windows forms是在.net中開發富客戶端(rich client)應用程序的基礎??蛻舳藨贸绦虮绕湎鄳幕跒g覽器的應用程序有一些固有的優勢。用戶可以運用客戶端應用程序,而不需要網絡連接。雖然在辦公環境中網絡已經無處不在了(尤其是隨著諸如802.11這樣的無線網絡技術的普及),但在不能利用網絡連接的情況下,用戶仍需要很多應用程序。例如,他們可能需要在家運用一個應用程序,在這種情況下,只有很少數的用戶有寬帶連接;或者需要在車間運用應用程序,這時候由于電磁干擾而不能進行網絡連接;或者在乘飛機旅行時。除了提供離線功能外,客戶端應用程序也可以充分利用windows的特殊功能,而基于瀏覽器的應用程序只能運用windows“最低標準”的功能。 windows forms是microsoft foundation classes(mfc)的“指定繼承人”,它是win32 api用戶界面庫的首選對象封裝器(object wrapper),但是mfc和windows forms之間有許多不同。嚴格地說,mfc是個c++類的模式,而任何.net語言都可以訪問windows forms的類。另外,類的模式的靈活性和可用性都有了很多改進。由于mfc本質上是win32上的一個thin wrapper,所以它有很多不一致性,而且很難學習并有效運用。windows forms類的模式是經過了改進的,一致的,它的學習曲線類似于visual basic的學習曲線,而且有更多的功能。運用windows forms,我們可以完成任何通過直接寫到win32類庫來完成的任務。如果你需要擴展類來支持你的應用程序的一個特殊的用戶界面,你可以通過繼承windows forms的類來實現。 運用mfc或visual basic創建客戶端應用程序的一個最大的缺點就是發布應用程序和所有必需的dlls很困難??蛻舳藨贸绦虻陌惭b步驟通常很復雜,而且可能很麻煩。windows forms的智能客戶端使我們可以在開發應用程序時將富客戶端的強大性和靈活性與基于瀏覽器的應用程序容易發布的特點結合起來。 asp.net是在.net中創建基于web的應用程序的重要技術。近幾年來,基于web的應用程序已經超越了簡單的數據庫存取前端系統的范圍,它包括許多不同的應用?;趙eb的應用程序對客戶端的限制非常低,這就是它們很受歡迎的一個原因。任何可以通過網絡訪問web服務器的機器都可以運用一個將符合標準的html發送到瀏覽器的應用程序。在界面功能上你需要考慮這種功能,使用戶可以在任何web瀏覽器上訪問一個應用程序,但是對于許多應用程序來說,固有的html標簽提供的基本的用戶界面部件就足夠創建一個可用的界面了。 除了可以創建基于html的應用程序外,asp.net也使創建基于soap(simple object access protocol)的web services變得非常容易了。在一個客戶端應用程序中使用一個web services也很簡單。因為通過運用.net的soap可以很容易地創建客戶端/服務器應用程序,所以在你的應用程序中提供多個界面就變得更容易了。將web services同富客戶端結合起來就可以讓用戶享有web應用程序和富客戶端的好處,從而彌補了它們各自的不足。 你在考慮pda用戶界面時會有新的想法。雖然對pdas的大肆宣傳已經減少了,但它們仍代表了用戶訪問社團信息的一種方式。gartner dataquest預言在2002年會生產1550萬pdas。由于pda的屏幕更小、輸入技術有限以及典型的使用環境,所以對pda界面的需求同對一個windows或web應用程序的需求有很大的不同。 因為為pda設計可用的應用程序與windows或web應用程序的開發截然不同,所以.net提供了工具以簡化該步驟。visual studio .net的smart device extensions可以讓開發人員運用.net 工具(他們已經很熟悉了)來創建.net compact framework應用程序。.net compact framework是.net framework的一個子集,它在資源受到限制的(resource-constrained)設備上運行,如pocket pc pdas、智能電話和其它運行windows ce .net的設備。 .net compact framework提供了必要的工具來創建可用的應用程序,包括客戶端對web services的訪問、ado.net、加密、適當的繪圖和窗體功能。除了只在pocket pc設備上運行的.net compact framework外,.net也具有microsoft mobile internet toolkit(mit)的特點。這個asp.net的擴展功能可以讓開發人員在各種設備上創建web應用程序,包括支持wap的手機和大多數運行palm os的pdas。它包含一組服務器端的控件,為列表、命令、通話、日歷等提供用戶界面元素??丶鶕L問設備自動提供適當的標識語言(html、wml、chtml)。這就可以讓你把精力集中到應用程序邏輯的開發和用戶回饋上,而mit則負責無線開發的細節。 付諸實施 .net提供了許多用戶界面技術。為了有助于你了解如何運用它們,我們創建了一個樣例應用程序,它有兩個界面:一個windows forms客戶端和一個asp.net客戶端。樣例是個時間跟蹤和項目管理應用程序,是為一個專門的服務公司開發的,用來跟蹤客戶項目所花的時間。該應用程序有明顯的需求不同的用戶群,可以很好地說明多用戶界面的應用。 在定義時間跟蹤應用程序的根本的需求時,我們確定了四種不同的用戶群:項目經理、顧問經理、顧問和訂約人。前兩種用戶需要數據輸入和報表分析的功能,而后兩種用戶只需要數據輸入和遠程訪問功能。因為這些用戶群的需求不同,所以我們把應用程序分成兩個界面:一個用于管理和分析的windows forms應用程序,和一個用于數據輸入和遠程訪問的asp.net web forms應用程序。 花時間了解應用程序的不同用戶群的需求是很有價值的,而這個步驟經常被人們忽視(見工具條“建立可用性需求”)。在著手設計應用程序時了解用戶群的需求可以使你的程序的重用性達到最大,還可以避免產品開發中的重復勞動。因為我們在設計應用程序時有了這樣的了解,所以我們就可以用asp.net web services了,并可以構建一個支持多個用戶界面平臺的簡單而有效的應用程序。 集中的、跨平臺的商業邏輯的一個危險就是在所有用戶界面平臺上實現該商業邏輯提供的全部功能。重要的一點是,我們應該關注個別界面的需求,不要因為可以得到某種商業邏輯提供的功能就去實現它。恰當的做法是要了解你的用戶群并始終考慮他們的需求。 根據我們創建.net應用程序的經驗,我們已經掌握了一些有用的東西,在此我們將分享給你。軟件開發中最大的挑戰之一就是收集并記錄需求。你努力去解決的問題(需求)往往會和那個問題的建議性解決方案(設計)混淆在一起?;镜挠美梢詭湍惴直嫘枨蠛驮O計(見資源)。將基本用例與具體用例進行比較,你會發現具體用例中說明了用戶和一個特殊界面之間的實際交互。當你編寫一個具體用例時,你已經創建了(至少是含蓄地)用戶界面。這種不成熟的界面設計可能在以后的開發周期中造成許多問題,尤其是如果你在你的應用程序中用了多個界面的話。如果用例指定了一個具體的依賴于特殊的windows控件的交互層,那么當交互媒介發生改變時,你就必須修改需求。這就會導致需求的脆弱性,它會阻止正常的設計進程并延遲開發。 仔細設計商業邏輯 在確定需求時,除了要非常注意細節外,我們發現仔細設計商業邏輯層尤為重要。最重要的是,如果你打算運用web services,你就需要注意管理串行化和傳送域對象的媒介的局限性。設計和構建適當的web services是該問題的關鍵:這個問題解決得好就可以讓你在.net中更容易地運用多個界面。雖然web services伴隨有許多夸張的宣傳,但在多個界面設計方面,它們的靈活性確實是不可比擬的。 你也需要了解你的應用程序將呈現的界面的相關的技術細節。例如,客戶端技術如何處理狀態?雖然asp.net為web應用程序簡化了狀態處理,但如果你的應用程序將有一個web界面時,這仍然是個需要考慮的問題。因為web依賴于無狀態的http協議進行通訊,因此確定如何跟蹤一個用戶在應用程序的位置這一負擔就落在了應用程序開發人員的身上。在asp.net中跟蹤狀態比用以前的技術跟蹤狀態要容易很多,但你仍需要確定在你的應用程序中如何跟蹤并運用狀態信息。在設計應用程序時考慮其它問題(包括數據結構和持久性)也是很重要的。http本身不支持傳送和保持數據結構(同保持狀態的問題類似),所以你必須確定如何在你的應用程序中實現它們。幸運的是,asp.net的易于使用的soap實現方式可以幫你解決這個問題。 忽視可用性是你在多界面應用程序中可能犯的最大的一個錯誤。對功能加以限定是種很好的方法:越少越好。在一個界面載入過多的功能會變得很混亂,而且很難使用。如果你遵循bauhaus的設計格言——形式追隨功能,那么就會得到更好的結果。了解你的應用程序可以提供的功能以及用戶如何使用那些功能對于創建一個可用的應用程序來說是很必要的。這可能意味著,每個平臺的界面根據那類用戶期望的功能的不同而有很大的不同。 在樣例應用程序中,web和windows forms界面明顯不同,因為我們有不同的用戶群,他們的使用模式不同。運用該應用程序的顧問對創建漂亮的報表不感興趣;他們只想根據項目記錄時間。給他們提供“額外”的報表分析功能可能是個好主意,但是最小限度地增加復雜性都會造成應用程序總成本的增加。如果顧問們需要額外的報表功能,那么我們應該一步步地收集需求并構建該功能。 先測試最重要的ui 有時侯你可能不需要多個界面,你可以通過先測試最重要的界面來確定這一點。例如,如果應用程序的主要用戶是內部windows桌面用戶,你可能認為智能客戶端界面是最重要的。另一方面,如果主要用戶是一群移動用戶,你可能選.net compact framework界面。不管你選擇哪個界面,你應該首先創建這個最重要的界面,對它進行測試來看看你是否真的需要提供另外的界面。這就可以讓你有機會仔細關注應用程序商業邏輯,并確信它是否非常穩固。通過一些可用性測試,你可能發現web界面“需求”是不需要的,如果你有一個設計良好的windows forms智能客戶端應用程序的話。如果測試表明你需要多個界面,你可以從最先發布的界面收集用戶反饋,它們可以用來改進未來界面的設計。 .net framework提供了很多技術可以使創建多個用戶界面的工作變得簡單。然而,在創建有效的用戶界面方面并沒有什么“尚方寶劍”。不管你用什么工具,仍然會有可用性這個基本問題:需要對用戶群及其用戶有所了解。一旦你了解了這些,你的開發小組就需要設計一個用戶界面使用戶可以更有效地執行他們的任務了。最后,開發小組需要測試這個用戶界面,確信它確實是個有效的解決方案。 多個用戶群對一個應用程序的界面需求會截然不同,這種情況會越來越多,你可以利用.net工具來創建你需要的界面。windows forms為windows用戶提供強大的、智能客戶端功能,而asp.net可以使開發人員創建強大的web應用程序;.net compact framework和mit可以讓你創建靈活的pda和手機用戶界面。了解你可以運用的工具以及用戶的需求是用.net構建成功的用戶界面的關鍵。 關于作者:robert ericsson是位經驗豐富的軟件開發人員和項目經理,他主要致力于microsoft技術的研究。jason cline是位軟件工程師,專門從事.net framework的研究。你可以通過[email protected]聯系他們。