計算機軟件技術基礎-CH3-軟件設計-臨時2_第1頁
計算機軟件技術基礎-CH3-軟件設計-臨時2_第2頁
計算機軟件技術基礎-CH3-軟件設計-臨時2_第3頁
計算機軟件技術基礎-CH3-軟件設計-臨時2_第4頁
計算機軟件技術基礎-CH3-軟件設計-臨時2_第5頁
已閱讀5頁,還剩69頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

3.3軟件設計3.3.1概要設計概要設計也稱總體設計,主要任務是設計系統體系結構,明確系統由哪些模塊(部件)組成,模塊之間的接口。*什么是軟件體系結構軟件體系結構是滿足各種功能需求和非功能需求(平安、可維護性、可重用性、可擴展性、可用性、牢靠性、可理解性、成本、藝術等)的結構化解決方案;結構化解決方案包括軟件元素的選擇,結構元素之間接口的確定,結構元素之間合作行為的描述,結構元素組合子系統的界定,體系結構樣式的選擇等;軟件元素之間的接口是元素外部可見的部分,元素的內部實現不屬于體系結構的范疇;*軟件體系結構的目標設計軟件體系結構的目標是識別影響軟件結構的需求,在系統、用戶和業務需求之間取得平衡,在時間、成本、技術等條件的制約下設計出滿足功能需求和非功能需求所需的體系結構;軟件體系結構只涉及系統的 結構,不關切元素實現細微環節;*設計軟件體系結構的指導原則體系結構要考慮對設計有影響、將來可能變更的因素,在設計時對相關部件要引入彈性以適應這種變更;體系結構也要對須要早做決策的部件優先確定其設計,這些部件一旦須要重新設計損失很大;可以運用各種設計工具(如UML(統一建模語言))幫助體系結構的設計,但也不要完全依靠這些工具,否則會丟失體系結構的敏捷性;體系結構的設計不行能一蹴而就,確定要經過不斷修改不斷完善的過程才能得到較為滿足的設計結果;*軟件體系結構設計方法—體系結構基本組成部件*體系結構基本組成部件—表示層*體系結構基本組成部件—表示層用戶接口部件(UserInterfacecomponents) 軟件的可視化元素,用于顯示信息給用戶以及接受用戶的輸入;表示邏輯部件(PresentationLogiccomponents) 負責處理用戶接口非可視化部分的功能,如驗證功能,用戶接口部件之間的通信,用戶操作的響應等;該部件并不是表示層必需的部件,只有當表示層非可視化部分的功能較多必需與UI部件的功能分別開時才須要設計該部件;表示模型部件(PresentationModelcomponents) Presentationmodelcomponents該部件對來自業務層的數據進行封裝(格式轉換),以便UI部件和PL部件運用;比如,該部件把來自業務層的不同來源的數據集成在一起然后把這些數據轉換為UI部件簡潔顯示的形式。*表示層—設計步驟Step1–理解UI需求Step2–確定

UI類型Step3–選擇一種UI實現技術Step4–設計表示層部件Step5–確定數據綁定需求Step6–確定錯誤處理策略Step7–確定數據驗證策略*表示層設計步驟一–理解UI需求理解UI需求是完成后續表示層設計步驟的關鍵,UI需求由系統的功能和用戶對界面的要求共同確定;設計對用戶友好界面要明確以下幾點:知曉用戶運用該系統要完成的任務以及每個任務或操作執行的次序;考慮系統須要供應應用戶和從用戶那獲得的信息以及數據的格式;了解用戶運用系統的工作環境和用戶的閱歷;UI是否須要多媒體支持,對于一些特殊數據類型(如貨幣、日期、時間等)是否支持地域特征,是否支持特性化特征(如允許實時變更界面風格與布局,較大的文本或按鈕,導航控件,搜尋功能,場景地圖等),顯示器等輸出設備的限制(如屏幕大小);*表示層設計步驟二–確定

UI類型基于第一步的分析結果,可以確定系統的UI類型,系統可能適合不止一種UI類型,也可能沒有一種UI類型完全適合系統(可以考慮設計多種類型的UI組合),;有如下幾種常見的UI類型:移動應用(Mobileapplications),此類應用的UI要考慮設備資源的限制;肥客戶機應用(Richclientapplications),此類應用的UI適合既要在線又可離線運用的軟件;純網絡應用(RichInternetapplications),該類應用一般在一種閱讀器中運行,此類應用的UI適合界面要求豐富且要在各種設備和平臺運行的在線軟件;Web應用(Webapplications),該類應用支持在多閱讀器中運行,此類應用的UI適合需在盡可能多的設備和平臺運行的在線軟件;限制臺應用(Console-basedapplications),此類應用的UI適合系統管理和開發軟件;*表示層設計步驟三–選擇一種UI實現技術移動應用Microsoft.NETCompactFrameworkASP.NETforMobileSilverlightforMobile肥客戶機應用WindowsPresentationFoundation(WPF)WindowsFormsWindowsFormswithWPFUserControlsWPFwithWindowsFormsUserControls純網絡應用SilverlightWeb應用ASP.NETWebForms限制臺應用*表示層設計步驟四–設計表示層部件UI部件UI部件可看作系統的視圖;分解系統窗口為一系列的控件,對于呈現信息的控件,可以利用控件的數據綁定特征;為了提高控件的可重用性,設計時盡量削減對控件類的繼承,增加對控件類的組合運用;盡量運用開發系統供應的標準控件,當然,假如找不到能完成待開發系統任務的控件,也可以設計用戶控件完成這個特殊任務,但絕大多數狀況都可以找到滿足須要的控件;*UI部件–控件向對話框中加入控件的方法運用對話框編輯器將系統選擇的控件添加在對話框模版中;在對話框類中添加該控件的一個類成員變量,即在AddMemberVariable對話框中選擇Control類型的變量添加;在對話框類的成員函數OnInitDialog為加入的控件設置初始狀態值;如有必要,在對話框類中建立控件產生消息的映射函數.*UI部件–控件注:在對話框編輯器中添加如下控件會引起運行時對話框消逝的錯誤,*SliderControlTreeControlDateTimePickerSpinControlTabControlMonthCalendarProgressControlAnimationControlIPAddressControlHotKeyRichEditControlExtendedComboBoxListControlRichEdit2.0ControlCustomControl解決方法就是用手工添加代碼的方法實現在對話框中加入控件。UI部件–控件Animation(動畫)CAnimateCtrl顯示AVI視頻剪輯的連續幀產生的消息:ACN_START:起先放映時發出ACN_STOP:放映結束時發出運用方法:在對話框類中創建該類的對象m_CAnimateCtrl;m_CAnimateCtrl.Open()裝載AVI剪輯;m_CAnimateCtrl.Play()放映AVI剪輯(或設置控件樣式為ACS_AUTOPLAY);m_CAnimateCtrl.Stop()停止放映;m_CAnimateCtrl.Close()釋放AVI剪輯所在占內存;*UI部件–控件button(按鈕)Cbutton按下按鈕發出一個吩咐產生的消息:ON_BN_CLICKED:用戶點擊按鈕時發出;*UI部件–控件combobox(組合框)CComboBox編輯框和列表框的組合體;產生的消息:很多,不一一列出;*UI部件–控件(日期時間)*UI部件–控件dateandtimepicker(日期時間)CDateTimeCtrl允許用戶選擇設置日期與時間;產生的消息:DTN_DATETIMECHANGE通知父窗口時間日期變更;其他還有很多,不一一列出;運用方法:比如修改在控件中顯示日期的方式:CStringformatStr=_T("'Todayis:'yy'/'MM'/'dd");m_DateTimeCtrl.SetFormat(formatStr);*UI部件–控件editbox(編輯框)CEdit編輯輸入文本產生的消息:ON_EN_CHANGE用戶修改了編輯框中的文本;其他還有很多,不一一列出;運用方法:比如設置編輯框允許接受的最大文本長度:CStringstrText(_T("I'maneditcontrol!"));UINTnLength=strText.GetLength()*sizeof(TCHAR);if(m_myEdit.GetLimitText()<nLength)m_myEdit.SetLimitText(nLength);m_myEdit.SetWindowText(strText);*UI部件–控件extendedcombobox(擴展組合框)CComboBoxEx可以顯示圖像的組合框產生的消息:CBEN_BEGINEDIT用戶點擊組合框中的編輯框;其他還有很多,不一一列出;運用方法:比如將一個圖片列表和組合框關聯:m_ImageList.Create(16,16,ILC_COLOR,2,2);m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));m_Ccomboxex.SetImageList(&m_ImageList);*UI部件–控件Header(表頭按鈕)*UI部件–控件Header(表頭按鈕)CHeaderCtrl在一列文本的表頭按鈕,限制顯示文本的寬度產生的消息:HDN_ITEMCLICK用戶點擊該控件;其他還有很多,不一一列出;運用方法:比如刪除表頭控件所屬項目:intnCount=m_myHeaderCtrl.GetItemCount();for(inti=0;i<nCount;i++){m_myHeaderCtrl.DeleteItem(0);}*UI部件–控件Hotkey(熱鍵)CHotKeyCtrl幫助用戶創建熱鍵運用方法:比如將熱鍵應用在:WORDwKeyAndShift=static_cast<WORD>(m_HotKeyCtrl.GetHotKey());this->SendMessage(WM_SETHOTKEY,wKeyAndShift);*UI部件–控件imagelist(相框)CImageList位圖或圖標圖像的集合運用方法:比如在列表中增加項目:CBitmapbm;bm.LoadBitmap(IDB_BITMAP1);m_myImageList.Add(&bm,RGB(0,0,0));*UI部件–控件List(列表)*UI部件–控件List(列表)CListCtrl顯示帶圖標的文本運用方法:比如增加表屬項目:CList<CString,CString&>myList;myList.AddHead(CString(_T("ABC")));myList.AddHead(CString(_T("123")));POSITIONpos=myList.GetHeadPosition();for(inti=0;i<myList.GetCount();i++){TRACE(_T("%s\r\n"),(LPCTSTR)myList.GetNext(pos));}*UI部件–控件ListBox(列表)*UI部件–控件listbox(列表盒)CListBox字符串列表框產生的消息:LBN_DBLCLK用戶雙擊該控件項目;其他還有很多,不一一列出;運用方法:比如刪除表屬項目:VoidCMyODListBox::DeleteItem(LPDELETEITEMSTRUCTlpDeleteItemStruct){ASSERT(lpDeleteItemStruct->CtlType==ODT_LISTBOX);LPVOIDlpszText=(LPVOID)lpDeleteItemStruct->itemData;ASSERT(lpszText!=NULL);free(lpszText);CListBox::DeleteItem(lpDeleteItemStruct);}*UI部件–控件monthcalendar(月歷)*UI部件–控件monthcalendar(月歷)CMonthCalCtrl顯示日期信息產生的消息:MCN_SELECT用戶選擇了日期;其他還有很多,不一一列出;運用方法:*m_calCtrl1.SetDayState(nCount,pDayState));UI部件–控件Progress(進展)*UI部件–控件Progress(進展)CProgressCtrl顯示任務的進展運用方法:設置控件:CProgressCtrlmyCtrl;myCtrl.Create(WS_CHILD|WS_VISIBLE,CRect(10,10,200,30),pParentWnd,IDC_PROGRESSCTRL);myCtrl.SetPos(myCtrl.GetPos()/2);*UI部件–控件Rebar(重欄)*UI部件–控件Rebar(重欄)CRebarCtrl子欄容器產生的消息:RBN_BEGINDRAG用戶拖動子帶;其他還有很多,不一一列出;運用方法:向控件增加子帶:CReBarm_wndReBar;m_wndReBar.Create(this);m_wndDlgBar.Create(this,IDD_DIALOGBAR,CBRS_ALIGN_TOP,IDD_DIALOGBAR);m_wndReBar.AddBar(&m_wndDlgBar);*UI部件–控件richedit(擴展文本框)CRichEditCtrl支持字符和段落格式的文本框產生的消息:EN_SELCHANGE文本選擇變更;其他還有很多,不一一列出;運用方法:查找:externCRichEditCtrl*pmyRichEditCtrl;LPCTSTRlpszmyString;FINDTEXTEXft;ft.chrg.cpMin=0;ft.chrg.cpMax=-1;ft.lpstrText=(LPSTR)lpszmyString;longn=pmyRichEditCtrl->FindText(FR_MATCHCASE|FR_WHOLEWORD,&ft);if(n!=-1)pmyRichEditCtrl->SetSel(ft.chrgText);*UI部件–控件scrollbar(滾動條)*UI部件–控件scrollbar(滾動條)CScrollBar滾動選擇產生的消息:WM_HSCROLL滾動;其他還有很多,不一一列出;運用方法:設置滾動條:voidCMyView::OnInitialUpdate(){CView::OnInitialUpdate();m_ScrollBar.SetScrollRange(0,10);m_ScrollBar.SetScrollPos(5);}*UI部件–控件static-text(靜態文本)CStatic顯示提示信息運用方法:位圖:myStatic.Create(_T("mystatic"),WS_CHILD|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE,CRect(10,10,150,50),pParentWnd);if(myStatic.GetBitmap()==NULL)myStatic.SetBitmap(

::LoadBitmap(NULL,MAKEINTRESOURCE(OBM_CLOSE)));*UI部件–控件*UI部件–控件statusbar(狀態欄)CStatusBarCtrl顯示狀態信息產生的消息:NM_DBLCLK雙擊;其他還有很多,不一一列出;運用方法:設置背景:intCMyStatusBarCtrl::OnCreate(LPCREATESTRUCTlpCreateStruct){if(CStatusBarCtrl::OnCreate(lpCreateStruct)==-1)return-1;SetBkColor(RGB(0,0,250));HICONhIcon;VERIFY(hIcon=AfxGetApp()->LoadIcon(IDR_PANE_0_ICON));VERIFY(SetIcon(0,hIcon));return0;}*UI部件–控件Toolbar(工具欄)CToolBarCtrl吩咐按鈕的容器*UI部件–控件Tree(樹)CTreeCtrl層級項顯示*UI部件–常用對話框ColorDialogBox(色調對話框)*UI部件–常用對話框ColorDialogBox(色調對話框)CColorDialog讓用戶選擇顏色*UI部件–常用對話框應用舉例一//獲得用戶選擇的顏色.CColorDialogdlg;if(dlg.DoModal()==IDOK){COLORREFcolor=dlg.GetColor();TRACE(//TRACE宏,用于調試"RGBvalueoftheselectedcolor–red=%u,green=%u,blue=%u\n",GetRValue(color),GetGValue(color),GetBValue(color));}*UI部件–常用對話框應用舉例二//獲得用戶選擇的16個顏色.CColorDialogdlg;f(dlg.DoModal()==IDOK){COLORREF*ccolor=dlg.GetSavedCustomColors();for(inti=0;i<16;i++){TRACE("RGBvalueoftheselectedcolor-red=%u,green=%u,blue=%u\n",GetRValue(ccolor[i]),GetGValue(ccolor[i]),GetBValue(ccolor[i]));}}*UI部件–常用對話框應用舉例三//重載消息處理函數。BOOLCMyColorDialog::OnColorOK(){if(GetDlgItemInt(COLOR_RED)==0&&GetDlgItemInt(COLOR_GREEN)==0&&GetDlgItemInt(COLOR_BLUE)==0){AfxMessageBox("BLACKisnotanacceptablecolor.Pleaseenteracoloragain");SetCurrentColor(GetColor());//不關閉對話框,重新讓用戶選擇。returnTRUE;}

//關閉對話框.

returnFALSE;}*UI部件–常用對話框*UI部件–常用對話框FindandReplaceDialogBox(查找替換無模式對話框)CFindReplaceDialog查找替換字符串有兩種查找替換對話框:查找對話框查找并替換對話框*UI部件–查找替換無模式對話框應用舉例一//登記處理對話框消息.classCMyFrameWnd:publicCFrameWnd{protected:afx_msgLONGOnFindReplace(WPARAMwParam,LPARAMlParam);DECLARE_MESSAGE_MAP()};staticUINTWM_FINDREPLACE=::RegisterWindowMessage(FINDMSGSTRING);BEGIN_MESSAGE_MAP(CMyFrameWnd,CFrameWnd)ON_REGISTERED_MESSAGE(WM_FINDREPLACE,OnFindReplace)END_MESSAGE_MAP*UI部件–查找替換無模式對話框應用舉例二//處理用戶輸入對話框中的文本.if(m_pFRDlg->IsTerminating()){//用戶是否關閉對話框

CStringcsFindString;CStringcsReplaceString;csFindString=m_pFRDlg->GetFindString();csReplaceString=m_pFRDlg->GetReplaceString();//寫注冊表VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,“FindString”,csFindString));//診斷調試宏VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,"ReplaceString",csReplaceString));VERIFY(m_pFRDlg->DestroyWindow());}*UI部件–查找替換無模式對話框應用舉例三//消息處理函數的實現.LRESULTCMainFrame::OnFindReplace(WPARAMwparam,LPARAMlparam){CFindReplaceDialog*pDlg=CFindReplaceDialog::GetNotifier(lparam)if(NULL!=pDlg){。。。}}*UI部件–常用對話框*UI部件–常用對話框FontDialogBox(字體對話框)CFontDialog選擇字體*UI部件–字體對話框應用舉例一//獲得選擇字體的顏色.CFontDialogdlg;if(dlg.DoModal()==IDOK){COLORREFcolor=dlg.GetColor();TRACE("Coloroftheselectedfont=%8x\n",color);}*UI部件–字體對話框應用舉例二//獲得選擇字體.CFontDialogdlg;if(dlg.DoModal()==IDOK){LOGFONTlf;dlg.GetCurrentFont(&lf);TRACE("Facenameoftheselectedfont=%s\n",lf.lfFaceName);}*typedefstructtagLOGFONT{LONGlfHeight;LONGlfWidth;//字體寬高

LONGlfEscapement;//角度LONGlfOrientation;//角度LONGlfWeight;//粗細BYTElfItalic;//斜體BYTElfUnderline;//下劃線BYTElfStrikeOut;//重影BYTElfCharSet;//字符集BYTElfOutPrecision;//輸出精確度BYTElfClipPrecision;//剪切方式BYTElfQuality;//匹配方式BYTElfPitchAndFamily;//字體支點和家族

TCHARlfFaceName[LF_FACESIZE];//字體名

}LOGFONT,*PLOGFONT;*UI部件–字體對話框應用舉例二//獲得選擇字體.CFontDialogdlg;if(dlg.DoModal()==IDOK){LOGFONTlf;dlg.GetCurrentFont(&lf);TRACE("Facenameoftheselectedfont=%s\n",lf.lfFaceName);}*UI部件–字體對話框應用舉例三//獲得字體特征.CFontDialogdlg;if(dlg.DoModal()==IDOK){CStringfacename=dlg.GetFaceName();TRACE("Facenameoftheselectedfont=%s\n",facename);intsize=dlg.GetSize();TRACE("Thesizeoftheselectedfont=%d\n",size);CStringstylename=dlg.GetStyleName();TRACE("Stylenameoftheselectedfont=%s\n",stylename);intweight=dlg.GetWeight();TRACE("Weightoftheselectedfont=%d\n",weight);BOOLbold=dlg.IsBold();TRACE("Istheselectedfontbold?%d\n",bold);}*UI部件–常用對話框*UI部件–常用對話框*UI部件–常用對話框OpenandSaveAsDialogBox(打開保存對話框)CFileDialog打開保存文件*UI部件–文件保存對話框應用舉例一//獲得文件路徑.CStringFilePathName;//TRUE為OPEN對話框,FALSE為SAVEAS對話框CFileDialogdlg(TRUE);if(dlg.DoModal()==IDOK){FilePathName=dlg.GetPathName();}*UI部件–文件保存對話框應用舉例二//讀取多個文件.CFileDialogdlg(TRUE,"DEMFiles(*DEM)",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,_T(“LayerFiles(*.DEM;*.TIFF;*.BMP;*.JPG)|*.DEM;*.TIFF;*.BMP;*.JPG;)"),NULL);

*UI部件–文件保存對話框應用舉例二//讀取多個文件.dlg.m_ofn.lpstrTitle=“讀取多文件示例";//最多可以打開100個文件dlg.m_ofn.nMaxFile=100*MAX_PATH;dlg.m_ofn.lpstrFile=newTCHAR[dlg.m_ofn.nMaxFile];ZeroMemory(dlg.m_ofn.lpstrFile,sizeof(TCHAR)*dlg.m_ofn.nMaxFile);

*UI部件–文件保存對話框應用舉例二//讀取多個文件.intretval=dlg.DoModal();if(retval==IDCANCEL)returnfalse;POSITIONpos_file;pos_file=dlg.GetStartPosition();CArrayary_filename;while(pos_file!=NULL)ary_filename.Add(dlg.GetNextPathName(pos_file));*UI部件–菜單CMenu*UI部件–菜單Cmenu介紹*m_hMenu與菜單對象關聯的Windows菜單句柄CMenu構造Cmenu(菜單)

對象DataMembers(數據成員)Construction(構造函數)UI部件–菜單Cmenu介紹*Initialization(初始化相關操作)Attach關聯菜單句柄到菜單對象CreateMenu創建空菜單并關聯到菜單對象CreatePopupMenu創建空彈出菜單并關聯到菜單對象DeleteTempMap刪除由FromHandle

成員函數創建的菜單對象DestroyMenu撤銷菜單與菜單對象的關聯,釋放菜單占用的內存空間Detach撤銷菜單句柄與菜單對象的關聯,返回該菜單句柄FromHandle根據菜單句柄創建菜單對象,返回指向該對象的指針GetSafeHmenu由菜單對象得到菜單句柄LoadMenu由資源名或資源編號標識的菜單資源與菜單對象關聯LoadMenuIndirect將內存中菜單模版所包含的菜單資源與菜單對象關聯UI部件–菜單Cmenu介紹*MenuOperations(菜單操作)DeleteMenu刪除菜單項TrackPopupMenu顯示彈出菜單并負責跟蹤用戶對彈出菜單項的選擇TrackPopupMenuEx顯示彈出菜單并負責跟蹤用戶對彈出菜單項的選擇UI部件–菜單Cmenu介紹*MenuItemOperations(菜單項操作)AppendMenuAppendsanewitemtotheendofthismenu.CheckMenuItemPlacesacheckmarknexttoorremovesacheckmarkfromamenuiteminthepop-upmenu.CheckMenuRadioItemPlacesaradiobuttonnexttoamenuitemandremovestheradiobuttonfromalloftheothermenuitemsinthegroup.EnableMenuItemEnables,disables,ordims(grays)amenuitem.GetDefaultItemDeterminesthedefaultmenuitemonthespecifiedmenu.GetMenuContextHelpIdRetrievesthehelpcontextIDassociatedwiththemenu.GetMenuInfoRetrievesinformationonaspecificmenu.SetMenuInfoSetsinformationonaspecificmenu.GetMenuItemCountDeterminesthenumberofitemsinapop-uportop-levelmenu.GetMenuItemIDObtainsthemenu-itemidentifierforamenuitemlocatedatthespecifiedposition.GetMenuItemInfoRetrievesinformationaboutamenuitem.GetMenuStateReturnsthestatusofthespecifiedmenuitemorthenumberofitemsinapop-upmenu.GetMenuStringRetrievesthelabelofthespecifiedmenuitem.GetSubMenuRetrievesapointertoapop-upmenu.InsertMenuInsertsanewmenuitematthespecifiedposition,movingotheritemsdownthemenu.InsertMenuItemInsertsanewmenuitematthespecifiedpositioninamenu.ModifyMenuChangesanexistingmenuitematthespecifiedposition.RemoveMenuDeletesamenuitemwithanassociatedpop-upmenufromthespecifiedmenu.SetDefaultItemSetsthedefaultmenuitemforthespecifiedmenu.SetMenuContextHelpIdSetsthehelpcontextIDtobeassociatedwiththemenu.SetMenuItemBitmapsAssociatesthespecifiedcheck-markbitmapswithamenuitem.SetMenuItemInfoChangesinformationaboutamenuitem.表示層設計步驟四–設計表示層部件PL部件IftheUIrequirescomplexprocessingormustcommunicatewithotherlayers,considerusingpresentationlogiccomponentstodecouplethisprocessingfromtheUIcomponents.Usepresentationlogiccomponentstostorestaterelatedto(butnotspecificto)theUI.Avoidimplementingbusinesslogicandbusinessrules,otherthaninputanddatavalidation,withinthepresentationlogiccomponents.Also,avoidimplementingrenderingorUIspecificlogicinthepresentationlogiccomponents.Usepresentationlogiccomponentstohelpyourapplicationrecoverfromafailureorerrorbyusingthemtomakesureafterrecoverythattheuserinterfaceisinaconsistentstate.WheretheUIrequirescomplexworkflowsupport,considercreatingseparateworkflowcomponentsthatuseaworkflowsystemsuchasWindowsWorkflowFoundationoracustommechanismwithintheapplication’sbusinesslayer.Formoreinformation,seeChapter14"DesigningWorkflowComponents."PresentationModelComponentsPresentationmodelcomponentsrepresentdatafromyourbusinesslayerinaconsumableformatforyourUIandpresentationlogiccomponentsinthepresentationlayer.Modelstypicallyrepresentdata,andsotheyusethedataaccessandpossiblythebusinesslayercomponentstocollectthatdata.Ifthemodelalsoencapsulatesbusinesslogic,itisusuallycalledapresentationentity.Presentationmodelcomponentsmay,forexample,aggregatedatafrommultiplesources,transformdatafortheUItodisplaymoreeasily,implementvalidationlogic,andmayhelptorepresentbusinesslogicandstatewithinthepresentationlayer.Theyaretypicallyusedtoimplementseparatedpresentationpatterns,suchasMVPorMVC.Considerthefollowingguidelineswhendesigningpresentationmodelcomponents:Determineifyourequirepresentationmodelcomponents.Typically,youmightusepresentationlayermodelsifthedataortheformattobedisplayedisspecifictothepresentationlayer,orifyouareusingaseparatedpresentationpatternsuchasMVPorMVC.Ifyouareworkingwithdata-boundcontrols,designorchooseappropriatepresentationmodelcomponentsthatyoucaneasilybindtoUIcontrols.Ifusingcustomobjects,collections,ordatasetsasyourpresentationmodelcomponentformat,ensurethattheyimplementthecorrectinterfacesandeventstosupportdatabinding.Ifyouperformdatavalidationinthepresentationlayer,consideraddingthecodeforthistoyourpresentationmodelcomponents.However,alsoconsiderhowyoucantakeadvantageofcentralizedvalidationcodeorcodelibraries.Considertheserializationrequirementsforthedatayouwillpasstoyourpresentationmodelcomponentsifthisdatawillbepassedoverthenetworkorstoredondiskontheclient.Youmustalsochooseasuitabledatatypeforyourpresentationmodelcomponentsandpresentationentities.Thischoiceisdrivenbytheapplicationrequirements,andconstrainedbyyourinfrastructureanddevelopmentcapabilities.Youmustfirstchooseadataformatforyourpresentationlayerdataanddecideifyourcomponentswillalsoencapsulatebusinesslogicandstate.Next,youmustdecidehowyouwillpresentthedatawithintheuserinterface.Thecommondataformatsforpresentationdataarethefollowing:Customclass.Useacustomclassifyouwanttorepresentyourdataasacomplexobjectthatmapsdirectlytoyourbusinessentities.Forexample,youmightcreateacustomOrderobjecttorepresentorderdata.Youcanalsouseacustomclasstoencapsulatebusinesslogicandstateandtoperformpresentationlayervalidationortoimplementcustomproperties.ArrayandCollection.Useanarrayoracollectionwhenyoumustbinddatatocontrolssuchaslistboxesanddrop-downliststhatusesinglecolumnvalues.DataSetandDataTable.UseaDataSetoraDataTablewhenyouareworkingwithsimpletable-baseddatawithdata-boundcontrolssuchasgrids,listboxes,anddrop-downlists.TypedDataset.UseaTypedDataSetwhenyouwanttightcouplingwithyourbusinessentitiestoavoiddiscrepanciesduetodatabasechanges.XML.ThisformatisusefulwhenworkingwithaWebclient,wherethedatacanbeembeddedinaWebpageorretrievedviaaWebserviceorHTTPrequest.XMLisagoodchoicewhenyouareusingcontrolssuchasatreevieworgrid.XMLisalsoeasytostore,serialize,andpassovercommunic

溫馨提示

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

評論

0/150

提交評論