《ASP-NET程序設(shè)計(jì)教程》-教學(xué)課件-第15章-組件化多層網(wǎng)站系統(tǒng)開(kāi)發(fā)_第1頁(yè)
《ASP-NET程序設(shè)計(jì)教程》-教學(xué)課件-第15章-組件化多層網(wǎng)站系統(tǒng)開(kāi)發(fā)_第2頁(yè)
《ASP-NET程序設(shè)計(jì)教程》-教學(xué)課件-第15章-組件化多層網(wǎng)站系統(tǒng)開(kāi)發(fā)_第3頁(yè)
《ASP-NET程序設(shè)計(jì)教程》-教學(xué)課件-第15章-組件化多層網(wǎng)站系統(tǒng)開(kāi)發(fā)_第4頁(yè)
《ASP-NET程序設(shè)計(jì)教程》-教學(xué)課件-第15章-組件化多層網(wǎng)站系統(tǒng)開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩103頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

組件化多層網(wǎng)站系統(tǒng)開(kāi)發(fā)北京理工大學(xué)計(jì)算機(jī)學(xué)院金旭亮程序設(shè)計(jì)之組件化多層網(wǎng)站系統(tǒng)開(kāi)發(fā)北京理工大學(xué)計(jì)算機(jī)學(xué)院金旭亮程序設(shè)1主要內(nèi)容組件化開(kāi)發(fā)基礎(chǔ)HappyBookShop網(wǎng)站開(kāi)發(fā)實(shí)踐2主要內(nèi)容組件化開(kāi)發(fā)基礎(chǔ)221組件化開(kāi)發(fā)基礎(chǔ)

1組件化開(kāi)發(fā)基礎(chǔ)3組件化開(kāi)發(fā)的概念“組件化開(kāi)發(fā)”,簡(jiǎn)稱為CBD,是“ComponentBasedDevelopment”的首字母縮寫(xiě)形式。是當(dāng)前主流的軟件開(kāi)發(fā)方式。組件的含義:組件是預(yù)先構(gòu)建好的組件是黑盒,只能通過(guò)其接口訪問(wèn)組件可以獨(dú)立地組合為新的軟件組件組件接口與組件實(shí)現(xiàn)相分離4組件化開(kāi)發(fā)的概念“組件化開(kāi)發(fā)”,簡(jiǎn)稱為CBD,是“Compo4組件化開(kāi)發(fā)的標(biāo)準(zhǔn)組件規(guī)范擁有者開(kāi)發(fā)語(yǔ)言運(yùn)行環(huán)境CORBAOMG多種本地操作系統(tǒng)COM微軟C++,VB等本地操作系統(tǒng).NET微軟C#,VB.NET等.NETFrameworkJavaBeanSunJavaJava虛擬機(jī)5組件化開(kāi)發(fā)的標(biāo)準(zhǔn)組件規(guī)范擁有者開(kāi)發(fā)語(yǔ)言運(yùn)行環(huán)境CORBAOM5組件化軟件的開(kāi)發(fā)方法復(fù)用已有的軟件組件,再開(kāi)發(fā)部分新的軟件組件,將組件組合裝配成新系統(tǒng)。6組件化軟件的開(kāi)發(fā)方法復(fù)用已有的軟件組件,再開(kāi)發(fā)部分新的軟件組6.NET平臺(tái)上的組件技術(shù)程序集7多文件程序集單文件程序集.NET平臺(tái)上的組件技術(shù)程序集7多文件程序集單文件程序集7信息系統(tǒng)的三層架構(gòu)8信息系統(tǒng)的三層架構(gòu)88真實(shí)軟件系統(tǒng)的分層架構(gòu)9真實(shí)軟件系統(tǒng)的分層架構(gòu)99大型網(wǎng)站的業(yè)務(wù)邏輯層設(shè)計(jì)在本示例網(wǎng)站中,業(yè)務(wù)邏輯層功能由數(shù)據(jù)存取類承擔(dān),這對(duì)于功能簡(jiǎn)單的小網(wǎng)站而言,足夠了。在大型的網(wǎng)站中,由于功能眾多,其網(wǎng)站架構(gòu)在“業(yè)務(wù)邏輯”這一層是最復(fù)雜的,往往又再劃分為更多的層,而且實(shí)現(xiàn)這些層功能的軟件組件往往還分布于不止一臺(tái)計(jì)算機(jī)上。這種設(shè)計(jì)稱為“N層分布式系統(tǒng)結(jié)構(gòu)”。10大型網(wǎng)站的業(yè)務(wù)邏輯層設(shè)計(jì)在本示例網(wǎng)站中,業(yè)務(wù)邏輯層功能由數(shù)據(jù)10大型網(wǎng)站采用的多層分布式架構(gòu)一般將承載業(yè)務(wù)邏輯層功能的計(jì)算機(jī)稱為“應(yīng)用程序服務(wù)器”,而將承載Web網(wǎng)站的計(jì)算機(jī)稱為“Web服務(wù)器”,最后端則是數(shù)據(jù)庫(kù)服務(wù)器。11大型網(wǎng)站采用的多層分布式架構(gòu)一般將承載業(yè)務(wù)邏輯層功能的計(jì)算機(jī)112面向?qū)ο笙到y(tǒng)的組件化開(kāi)發(fā)過(guò)程2面向?qū)ο笙到y(tǒng)的組件化開(kāi)發(fā)過(guò)程12軟件開(kāi)發(fā)的基本過(guò)程需求分析系統(tǒng)設(shè)計(jì)開(kāi)發(fā)與測(cè)試系統(tǒng)發(fā)布13軟件開(kāi)發(fā)的基本過(guò)程需求分析1313基于軟件組件的增量與迭代開(kāi)發(fā)模型(1)使用組件構(gòu)造系統(tǒng)14基于軟件組件的增量與迭代開(kāi)發(fā)模型(1)使用組件構(gòu)造系統(tǒng)1414基于軟件組件的增量與迭代開(kāi)發(fā)模型(2)增量開(kāi)發(fā)15基于軟件組件的增量與迭代開(kāi)發(fā)模型(2)增量開(kāi)發(fā)1515基于軟件組件的增量與迭代開(kāi)發(fā)模型(3)迭代開(kāi)發(fā)16基于軟件組件的增量與迭代開(kāi)發(fā)模型(3)迭代開(kāi)發(fā)16163HAPPYBOOKSHOP開(kāi)發(fā)指導(dǎo)在完成了技術(shù)基礎(chǔ)知識(shí)的學(xué)習(xí)之后,需要將這些知識(shí)應(yīng)用于實(shí)踐,才能對(duì)知識(shí)有深刻的理解,將這些“死”的知識(shí)變成“活”的技能,并形成一個(gè)有活力的可以不斷擴(kuò)充的“知識(shí)框架”。3HAPPYBOOKSHOP開(kāi)發(fā)指導(dǎo)在完成了技術(shù)基礎(chǔ)17實(shí)戰(zhàn)項(xiàng)目:HAPPYBOOKSHOP網(wǎng)站一個(gè)典型的網(wǎng)站,是對(duì)現(xiàn)有的許多“網(wǎng)上書(shū)店”網(wǎng)站功能的精簡(jiǎn)版本。其目的是大家提供一個(gè)實(shí)踐的場(chǎng)景,加深對(duì)于已掌握知識(shí)的理解,培養(yǎng)真實(shí)的開(kāi)發(fā)技能。18實(shí)戰(zhàn)項(xiàng)目:HAPPYBOOKSHOP網(wǎng)站一個(gè)典型的網(wǎng)站,是對(duì)18示例網(wǎng)站的開(kāi)發(fā)幾乎用到了我們所學(xué)的所有技術(shù)19HappyBookShopSQLServer2005數(shù)據(jù)綁定WebServiceAJAX用戶控件成員資格與角色管理一般處理程序JavaScriptCSS母版頁(yè)示例網(wǎng)站的開(kāi)發(fā)幾乎用到了我們所學(xué)的所有技術(shù)19HappyBo19網(wǎng)站需求分析弄清楚網(wǎng)站要提供給用戶哪些功能,對(duì)數(shù)據(jù)進(jìn)行哪些處理工作。功能——用例圖數(shù)據(jù)處理工作——建立領(lǐng)域模型20網(wǎng)站需求分析弄清楚網(wǎng)站要提供給用戶哪些功能,對(duì)數(shù)據(jù)進(jìn)行哪些處20網(wǎng)站功能用例圖21網(wǎng)站功能用例圖2121建立網(wǎng)站的領(lǐng)域模型系統(tǒng)涉及到哪些數(shù)據(jù),進(jìn)行哪些處理工作22書(shū)出版社作者讀者建立網(wǎng)站的領(lǐng)域模型系統(tǒng)涉及到哪些數(shù)據(jù),進(jìn)行哪些處理工作22書(shū)22網(wǎng)站系統(tǒng)設(shè)計(jì)解決軟件架構(gòu)與技術(shù)選型問(wèn)題示例網(wǎng)站采用多層架構(gòu)與ASP.NET+AJAX+SQLServer多層結(jié)構(gòu)是一種成熟的軟件系統(tǒng)架構(gòu),有許多種變形,它的基本思想是將系統(tǒng)劃分一定的層次,下層為上層提供特定的服務(wù),不允許跨層調(diào)用。每層的功能目前多采用組件化技術(shù)開(kāi)發(fā)完成。23網(wǎng)站系統(tǒng)設(shè)計(jì)解決軟件架構(gòu)與技術(shù)選型問(wèn)題2323示例網(wǎng)站的多層架構(gòu)24示例網(wǎng)站的多層架構(gòu)2424示例網(wǎng)站系統(tǒng)架構(gòu)詳解示例網(wǎng)站系統(tǒng)架構(gòu)詳解25業(yè)務(wù)邏輯層/數(shù)據(jù)存取層的設(shè)計(jì)業(yè)務(wù)邏輯層/數(shù)據(jù)存取層的設(shè)計(jì)26實(shí)體類設(shè)計(jì)方案根據(jù)領(lǐng)域分析的結(jié)果,結(jié)合實(shí)際情況,可以得出實(shí)體類的設(shè)計(jì)方案27BookBookRemark1n出于簡(jiǎn)化的目的,出版社和作者等其他對(duì)象不再創(chuàng)建單獨(dú)的實(shí)體類實(shí)體類設(shè)計(jì)方案根據(jù)領(lǐng)域分析的結(jié)果,結(jié)合實(shí)際情況,可以得出實(shí)體27數(shù)據(jù)庫(kù)表結(jié)構(gòu)根據(jù)實(shí)體類設(shè)計(jì)圖,可以很快地得出數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表結(jié)構(gòu):28再補(bǔ)充一個(gè)表,用于保存在前臺(tái)首頁(yè)顯示的書(shū)信息數(shù)據(jù)庫(kù)表結(jié)構(gòu)根據(jù)實(shí)體類設(shè)計(jì)圖,可以很快地得出數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表28有關(guān)數(shù)據(jù)庫(kù)表和實(shí)體類的設(shè)計(jì)方法牢記:先進(jìn)行領(lǐng)域分析,確定系統(tǒng)中要處理哪些數(shù)據(jù),并將這些數(shù)據(jù)抽象為實(shí)體類之后,再設(shè)計(jì)數(shù)據(jù)庫(kù)表。一般是一個(gè)類對(duì)應(yīng)一個(gè)表。如果類之間有關(guān)聯(lián),則表之間也應(yīng)該建立關(guān)聯(lián)。在設(shè)計(jì)和實(shí)現(xiàn)實(shí)體類時(shí),要注意以下兩點(diǎn):注意數(shù)據(jù)庫(kù)字段是有大小和長(zhǎng)度限制的各屬性應(yīng)給與一個(gè)初始值類名和表名,屬性名和字段名要一致除非數(shù)據(jù)信息內(nèi)容和關(guān)聯(lián)非常復(fù)雜導(dǎo)致實(shí)體類包含太多的屬性,不要讓一個(gè)類對(duì)應(yīng)多張數(shù)據(jù)庫(kù)表。數(shù)據(jù)庫(kù)表結(jié)構(gòu)一旦確定,不到萬(wàn)不得已,不要再進(jìn)行大的改動(dòng),因此,必須對(duì)各種情況進(jìn)行分析后進(jìn)行精心設(shè)計(jì)。29有關(guān)數(shù)據(jù)庫(kù)表和實(shí)體類的設(shè)計(jì)方法牢記:先進(jìn)行領(lǐng)域分析,確定系統(tǒng)29數(shù)據(jù)存取類設(shè)計(jì)——隔離原則示例網(wǎng)站的功能比較簡(jiǎn)單,主要就是實(shí)體類對(duì)象的增、刪、改和查四種操作,為此,設(shè)計(jì)若干個(gè)數(shù)據(jù)存取類來(lái)完成網(wǎng)站功能,其命名規(guī)則為:“實(shí)體類”+“Access”。數(shù)據(jù)存取類進(jìn)入的信息和返回的信息都是以實(shí)體類對(duì)象為主。30數(shù)據(jù)存取類在內(nèi)部調(diào)用來(lái)訪問(wèn)數(shù)據(jù)庫(kù)數(shù)據(jù)存取類使得上層模塊要訪問(wèn)數(shù)據(jù)時(shí),不再需要與打交道。數(shù)據(jù)存取類設(shè)計(jì)——隔離原則示例網(wǎng)站的功能比較簡(jiǎn)單,主要就是實(shí)30WEB服務(wù)層設(shè)計(jì)本示例網(wǎng)站中,將搜索圖書(shū)的功能使用WebService向外發(fā)布,由BookService類實(shí)現(xiàn)。31BookService只是在內(nèi)部直接調(diào)用業(yè)務(wù)邏輯層組件完成搜索圖書(shū)的功能,一般情況下,Web服務(wù)層的組件不需要直接調(diào)用來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。WEB服務(wù)層設(shè)計(jì)本示例網(wǎng)站中,將搜索圖書(shū)的功能使用WebS31界面層設(shè)計(jì)的基本原則本例中的界面層主要指的是頁(yè)面,以及聚合Web服務(wù)的WindowsForm應(yīng)用程序。對(duì)于網(wǎng)站中的頁(yè)面,要分類存放,不要全部丟在網(wǎng)站的根目錄中。充分利用已有的組件以搭積木的方式構(gòu)造用戶界面。通常將多個(gè)頁(yè)面重復(fù)出現(xiàn)的部分做成用戶控件以便復(fù)用。32界面層設(shè)計(jì)的基本原則本例中的界面層主要指的是頁(yè)面,以及聚合W32整個(gè)示例網(wǎng)站的總體結(jié)構(gòu)如下:33整個(gè)示例網(wǎng)站的總體結(jié)構(gòu)如下:3333示例網(wǎng)站開(kāi)發(fā)中的技術(shù)關(guān)鍵點(diǎn)示例網(wǎng)站開(kāi)發(fā)中的技術(shù)關(guān)鍵點(diǎn)34母版頁(yè)前臺(tái)母版頁(yè)定制頁(yè)眉和頁(yè)腳。后臺(tái)母版頁(yè)放置TreeView進(jìn)行導(dǎo)航:35前臺(tái)后臺(tái)所用的樣式表集中在App_Themes文件夾下的兩個(gè)主題中。示例網(wǎng)站在母版頁(yè)中直接引用它們。網(wǎng)頁(yè)布局的樣式表延續(xù)了以前系列課程中的設(shè)置。另一種方法是在每個(gè)單獨(dú)頁(yè)面的頁(yè)面指令中設(shè)置其Theme=“主題名稱”,會(huì)自動(dòng)加載其中的樣式表。母版頁(yè)前臺(tái)母版頁(yè)定制頁(yè)眉和頁(yè)腳。35前臺(tái)后臺(tái)所用的樣式表集中35用戶權(quán)限管理部分的實(shí)現(xiàn)使用“網(wǎng)站配置”設(shè)計(jì)兩個(gè)角色:Manager和Reader,并規(guī)定好訪問(wèn)規(guī)則。前臺(tái)兩個(gè)網(wǎng)頁(yè)、使用現(xiàn)成的登錄控件配合成員資格和角色管理機(jī)制進(jìn)行開(kāi)發(fā)。首頁(yè)的登錄面板使用LoginView為不同角色定制模板,使用LoginStatus、LoginName等現(xiàn)成控件快速搭建模板。后臺(tái)頁(yè)面:直接使用MemberShip和GridView實(shí)現(xiàn)用戶管理。36用戶權(quán)限管理部分的實(shí)現(xiàn)使用“網(wǎng)站配置”設(shè)計(jì)兩個(gè)角色:Mana36用戶權(quán)限管理功能的配置默認(rèn)情況下,成員資格對(duì)帳號(hào)的要求是比較嚴(yán)格的,比如要求密碼必須有7位,其中至少有一位是非數(shù)字等。上述配置放在機(jī)器的中。示例網(wǎng)站通過(guò)在中定制成員資格參數(shù),去掉了這些設(shè)置。37用戶權(quán)限管理功能的配置默認(rèn)情況下,成員資格對(duì)帳號(hào)的要求是比較37用戶控件設(shè)計(jì)示例網(wǎng)站使用用戶控件封裝可重用界面部分(用戶控件套用戶控件,前臺(tái)后臺(tái)一起用)38用戶控件設(shè)計(jì)示例網(wǎng)站使用用戶控件封裝可重用界面部分(用戶控件38用戶控件開(kāi)發(fā)分析::用于顯示單本書(shū),它接收一個(gè)Book對(duì)象,然后將其信息顯示在控件中。控件使用表格進(jìn)行定位。39:接收一個(gè)List<Book>,然后分兩列顯示圖書(shū)信息(Book對(duì)象)。使用DataList實(shí)現(xiàn),在其模板中嵌套SingleBook.ascx,并附加一個(gè)CheckBox,用屬性ShowCheckBox來(lái)控制其是否顯示。方法GetSelectedBookIDs返回用戶選擇的BookID集合。DataList不直接支持分頁(yè),因此需寫(xiě)代碼實(shí)現(xiàn)分頁(yè)。用戶控件開(kāi)發(fā)分析::用于顯示單本書(shū),它接收一個(gè)Book對(duì)象,39后臺(tái)錄入新書(shū)和修改圖書(shū)用到了同樣的一個(gè)用戶控件。當(dāng)錄入新書(shū)時(shí),此控件新建一個(gè)Book對(duì)象,當(dāng)修改圖書(shū)時(shí),從外界傳入一個(gè)Book對(duì)象(放在其BookObj屬性中),控件負(fù)責(zé)顯示Book對(duì)象到頁(yè)面上。使用一個(gè)IsAddNew屬性設(shè)置此控件所處的狀態(tài)(是錄新書(shū)還是改舊書(shū))。此控件不與數(shù)據(jù)庫(kù)打交道,而由頁(yè)面對(duì)象負(fù)責(zé)從其BookObj屬性中取出Book對(duì)象,然后調(diào)用數(shù)據(jù)存取對(duì)象將其保存或更新到數(shù)據(jù)庫(kù)中。40后臺(tái)錄入新書(shū)和修改圖書(shū)用到了同樣的一個(gè)用戶控件。4040圖書(shū)推薦級(jí)別顯示圖書(shū)的“星級(jí)”使用一般處理程序用GDI+生成,從QueryString中提取要繪制的星星個(gè)數(shù)。41圖書(shū)推薦級(jí)別顯示圖書(shū)的“星級(jí)”使用一般處理程序用GDI+生成41封面文件的保存用戶上傳的圖書(shū)封面,統(tǒng)一給其取個(gè)新名,為避免重名,采用GUID來(lái)生成。42stringFileExt=Path.GetExtension(FileUpload1.FileName);stringFileName=Guid.NewGuid().ToString()+FileExt;FileUpload1.SaveAs(Server.MapPath("~/CoverImageFiles")+"/"+FileName);bookobj.CoverImageUrl="~/CoverImageFiles/"+FileName;封面文件的保存用戶上傳的圖書(shū)封面,統(tǒng)一給其取個(gè)新名,為避免重42客戶端桌面應(yīng)用程序的開(kāi)發(fā)要點(diǎn)桌面應(yīng)用程序聚合示例網(wǎng)站發(fā)布的圖書(shū)查詢功能。當(dāng)生成WebService的代理對(duì)象后,可以通過(guò)設(shè)定此對(duì)象的url屬性來(lái)更改編譯時(shí)指定的WebServiceUrl。PictureBox控件有一個(gè)ImageLocation屬性可以獲取網(wǎng)絡(luò)上的圖片。43客戶端桌面應(yīng)用程序的開(kāi)發(fā)要點(diǎn)桌面應(yīng)用程序聚合示例網(wǎng)站發(fā)布的圖43示例網(wǎng)站的開(kāi)發(fā)流程示例網(wǎng)站的開(kāi)發(fā)流程44安排開(kāi)發(fā)流程的基本原則先開(kāi)發(fā)中間層,再開(kāi)發(fā)界面層45迭代開(kāi)發(fā):

每開(kāi)發(fā)完一個(gè)功能,馬上進(jìn)行測(cè)試,正常后才進(jìn)入下一個(gè)功能的開(kāi)發(fā)?;谟美?qū)動(dòng)的開(kāi)發(fā)方法:

一個(gè)功能一個(gè)功能地完成開(kāi)發(fā),先開(kāi)發(fā)重要的功能,再開(kāi)發(fā)次要的功能。優(yōu)先開(kāi)發(fā)被別人調(diào)用,不調(diào)用別人的組件和模塊。安排開(kāi)發(fā)流程的基本原則先開(kāi)發(fā)中間層,再開(kāi)發(fā)界面層45迭代開(kāi)45中間層開(kāi)發(fā)的工作安排建數(shù)據(jù)庫(kù)表。開(kāi)發(fā)實(shí)體類。實(shí)現(xiàn)數(shù)據(jù)存取類,編寫(xiě)簡(jiǎn)單的測(cè)試網(wǎng)頁(yè),驗(yàn)證其工作正常。完成中間層的開(kāi)發(fā)任務(wù)后,進(jìn)入表示層開(kāi)發(fā)。46中間層開(kāi)發(fā)的工作安排建數(shù)據(jù)庫(kù)表。4646表示層開(kāi)發(fā)——書(shū)的錄入與維護(hù)后臺(tái)添加新書(shū)后臺(tái)刪除書(shū)(暫不集成選書(shū)功能,直接接收BookID)后臺(tái)修改書(shū)信息(暫不集成選書(shū)功能,直接接收BookID)至此,系統(tǒng)具備基本的信息維護(hù)功能。47表示層開(kāi)發(fā)——書(shū)的錄入與維護(hù)后臺(tái)添加新書(shū)4747表示層開(kāi)發(fā)——顯示和查找圖書(shū)在前臺(tái)顯示書(shū)詳細(xì)信息:顯示圖書(shū)推薦級(jí)別:顯示圖書(shū)封面大圖:至此系統(tǒng)可以顯示一本書(shū)的信息(除書(shū)評(píng)外)完成查找書(shū)功能:

前臺(tái)完善后臺(tái)修改書(shū)和刪除書(shū)的功能,允許其選完書(shū)后再進(jìn)行相關(guān)操作。48表示層開(kāi)發(fā)——顯示和查找圖書(shū)在前臺(tái)顯示書(shū)詳細(xì)信息:4848表示層開(kāi)發(fā)——書(shū)評(píng)完善,給其添加書(shū)評(píng)功能。在后臺(tái)的中,添加“刪除本書(shū)所有書(shū)評(píng)”功能。至此,完成展示單本圖書(shū)信息的全部任務(wù)。49表示層開(kāi)發(fā)——書(shū)評(píng)完善,給其添加書(shū)評(píng)功能。4949表示層開(kāi)發(fā)——網(wǎng)站首頁(yè)設(shè)計(jì)設(shè)計(jì)網(wǎng)站首頁(yè),將拖入,設(shè)置圖書(shū)顯示區(qū),添加“圖書(shū)搜索”區(qū),掛接上已開(kāi)發(fā)好的。在后臺(tái)添加“選擇首頁(yè)顯示書(shū)”功能:,其顯示的書(shū)的BookID放在PublishItem表中。至此,有關(guān)圖書(shū)信息展示與維護(hù)的工作全部完成,下面進(jìn)入輔助功能的開(kāi)發(fā)……50表示層開(kāi)發(fā)——網(wǎng)站首頁(yè)設(shè)計(jì)設(shè)計(jì)網(wǎng)站首頁(yè),將拖入,設(shè)置圖書(shū)顯示50表示層開(kāi)發(fā)——用戶管理使用“網(wǎng)站管理工具”創(chuàng)建Reader和Manager兩個(gè)角色,并給網(wǎng)站Manager文件夾設(shè)定只有Manager可以訪問(wèn)。修改,設(shè)定成員資格和角色管理相關(guān)參數(shù)。在主頁(yè)添加用戶登錄模塊,完成兩個(gè)頁(yè)面的開(kāi)發(fā),允許用戶創(chuàng)建賬號(hào)、注銷和修改密碼。設(shè)計(jì)前臺(tái)登錄面板,針對(duì)管理員添加到后面管理頁(yè)面的鏈接。添加后臺(tái)用戶管理功能:。至此,用戶管理部分開(kāi)發(fā)完畢。51表示層開(kāi)發(fā)——用戶管理使用“網(wǎng)站管理工具”創(chuàng)建Reader和51表示層開(kāi)發(fā)——改善網(wǎng)站交互性利用AJAX提供更友好的界面。使用UpdatePanel實(shí)現(xiàn)頁(yè)面的局部刷新。前臺(tái)頁(yè)面應(yīng)用情況如下:BookInfo.aspx:發(fā)表書(shū)評(píng)時(shí)局部刷新FindBook.aspx:圖書(shū)列表部分(分頁(yè)時(shí)局部刷新)后臺(tái)的以下頁(yè)面也使用了UpdatePanel:52表示層開(kāi)發(fā)——改善網(wǎng)站交互性利用AJAX提供更友好的界面。552服務(wù)層開(kāi)發(fā)——向外界開(kāi)放查詢服務(wù)給網(wǎng)站添加WebService:

開(kāi)發(fā)桌面聚合服務(wù)客戶端:UseBookService53服務(wù)層開(kāi)發(fā)——向外界開(kāi)放查詢服務(wù)給網(wǎng)站添加WebServi53進(jìn)一步完善在IE和火狐下測(cè)試網(wǎng)頁(yè)是否顯示正常,利用CSS和各種素材對(duì)網(wǎng)頁(yè)進(jìn)行美化。更多的工作可以試一試將成員資格移植到SQLServer中,與書(shū)信息共用同一數(shù)據(jù)庫(kù)。添加功能完備的書(shū)評(píng)管理功能。給這個(gè)網(wǎng)站添加任何想添加的功能。54進(jìn)一步完善在IE和火狐下測(cè)試網(wǎng)頁(yè)是否顯示正常,利用CSS和54組件化多層網(wǎng)站系統(tǒng)開(kāi)發(fā)北京理工大學(xué)計(jì)算機(jī)學(xué)院金旭亮程序設(shè)計(jì)之組件化多層網(wǎng)站系統(tǒng)開(kāi)發(fā)北京理工大學(xué)計(jì)算機(jī)學(xué)院金旭亮程序設(shè)55主要內(nèi)容組件化開(kāi)發(fā)基礎(chǔ)HappyBookShop網(wǎng)站開(kāi)發(fā)實(shí)踐56主要內(nèi)容組件化開(kāi)發(fā)基礎(chǔ)2561組件化開(kāi)發(fā)基礎(chǔ)

1組件化開(kāi)發(fā)基礎(chǔ)57組件化開(kāi)發(fā)的概念“組件化開(kāi)發(fā)”,簡(jiǎn)稱為CBD,是“ComponentBasedDevelopment”的首字母縮寫(xiě)形式。是當(dāng)前主流的軟件開(kāi)發(fā)方式。組件的含義:組件是預(yù)先構(gòu)建好的組件是黑盒,只能通過(guò)其接口訪問(wèn)組件可以獨(dú)立地組合為新的軟件組件組件接口與組件實(shí)現(xiàn)相分離58組件化開(kāi)發(fā)的概念“組件化開(kāi)發(fā)”,簡(jiǎn)稱為CBD,是“Compo58組件化開(kāi)發(fā)的標(biāo)準(zhǔn)組件規(guī)范擁有者開(kāi)發(fā)語(yǔ)言運(yùn)行環(huán)境CORBAOMG多種本地操作系統(tǒng)COM微軟C++,VB等本地操作系統(tǒng).NET微軟C#,VB.NET等.NETFrameworkJavaBeanSunJavaJava虛擬機(jī)59組件化開(kāi)發(fā)的標(biāo)準(zhǔn)組件規(guī)范擁有者開(kāi)發(fā)語(yǔ)言運(yùn)行環(huán)境CORBAOM59組件化軟件的開(kāi)發(fā)方法復(fù)用已有的軟件組件,再開(kāi)發(fā)部分新的軟件組件,將組件組合裝配成新系統(tǒng)。60組件化軟件的開(kāi)發(fā)方法復(fù)用已有的軟件組件,再開(kāi)發(fā)部分新的軟件組60.NET平臺(tái)上的組件技術(shù)程序集61多文件程序集單文件程序集.NET平臺(tái)上的組件技術(shù)程序集7多文件程序集單文件程序集61信息系統(tǒng)的三層架構(gòu)62信息系統(tǒng)的三層架構(gòu)862真實(shí)軟件系統(tǒng)的分層架構(gòu)63真實(shí)軟件系統(tǒng)的分層架構(gòu)963大型網(wǎng)站的業(yè)務(wù)邏輯層設(shè)計(jì)在本示例網(wǎng)站中,業(yè)務(wù)邏輯層功能由數(shù)據(jù)存取類承擔(dān),這對(duì)于功能簡(jiǎn)單的小網(wǎng)站而言,足夠了。在大型的網(wǎng)站中,由于功能眾多,其網(wǎng)站架構(gòu)在“業(yè)務(wù)邏輯”這一層是最復(fù)雜的,往往又再劃分為更多的層,而且實(shí)現(xiàn)這些層功能的軟件組件往往還分布于不止一臺(tái)計(jì)算機(jī)上。這種設(shè)計(jì)稱為“N層分布式系統(tǒng)結(jié)構(gòu)”。64大型網(wǎng)站的業(yè)務(wù)邏輯層設(shè)計(jì)在本示例網(wǎng)站中,業(yè)務(wù)邏輯層功能由數(shù)據(jù)64大型網(wǎng)站采用的多層分布式架構(gòu)一般將承載業(yè)務(wù)邏輯層功能的計(jì)算機(jī)稱為“應(yīng)用程序服務(wù)器”,而將承載Web網(wǎng)站的計(jì)算機(jī)稱為“Web服務(wù)器”,最后端則是數(shù)據(jù)庫(kù)服務(wù)器。65大型網(wǎng)站采用的多層分布式架構(gòu)一般將承載業(yè)務(wù)邏輯層功能的計(jì)算機(jī)652面向?qū)ο笙到y(tǒng)的組件化開(kāi)發(fā)過(guò)程2面向?qū)ο笙到y(tǒng)的組件化開(kāi)發(fā)過(guò)程66軟件開(kāi)發(fā)的基本過(guò)程需求分析系統(tǒng)設(shè)計(jì)開(kāi)發(fā)與測(cè)試系統(tǒng)發(fā)布67軟件開(kāi)發(fā)的基本過(guò)程需求分析1367基于軟件組件的增量與迭代開(kāi)發(fā)模型(1)使用組件構(gòu)造系統(tǒng)68基于軟件組件的增量與迭代開(kāi)發(fā)模型(1)使用組件構(gòu)造系統(tǒng)1468基于軟件組件的增量與迭代開(kāi)發(fā)模型(2)增量開(kāi)發(fā)69基于軟件組件的增量與迭代開(kāi)發(fā)模型(2)增量開(kāi)發(fā)1569基于軟件組件的增量與迭代開(kāi)發(fā)模型(3)迭代開(kāi)發(fā)70基于軟件組件的增量與迭代開(kāi)發(fā)模型(3)迭代開(kāi)發(fā)16703HAPPYBOOKSHOP開(kāi)發(fā)指導(dǎo)在完成了技術(shù)基礎(chǔ)知識(shí)的學(xué)習(xí)之后,需要將這些知識(shí)應(yīng)用于實(shí)踐,才能對(duì)知識(shí)有深刻的理解,將這些“死”的知識(shí)變成“活”的技能,并形成一個(gè)有活力的可以不斷擴(kuò)充的“知識(shí)框架”。3HAPPYBOOKSHOP開(kāi)發(fā)指導(dǎo)在完成了技術(shù)基礎(chǔ)71實(shí)戰(zhàn)項(xiàng)目:HAPPYBOOKSHOP網(wǎng)站一個(gè)典型的網(wǎng)站,是對(duì)現(xiàn)有的許多“網(wǎng)上書(shū)店”網(wǎng)站功能的精簡(jiǎn)版本。其目的是大家提供一個(gè)實(shí)踐的場(chǎng)景,加深對(duì)于已掌握知識(shí)的理解,培養(yǎng)真實(shí)的開(kāi)發(fā)技能。72實(shí)戰(zhàn)項(xiàng)目:HAPPYBOOKSHOP網(wǎng)站一個(gè)典型的網(wǎng)站,是對(duì)72示例網(wǎng)站的開(kāi)發(fā)幾乎用到了我們所學(xué)的所有技術(shù)73HappyBookShopSQLServer2005數(shù)據(jù)綁定WebServiceAJAX用戶控件成員資格與角色管理一般處理程序JavaScriptCSS母版頁(yè)示例網(wǎng)站的開(kāi)發(fā)幾乎用到了我們所學(xué)的所有技術(shù)19HappyBo73網(wǎng)站需求分析弄清楚網(wǎng)站要提供給用戶哪些功能,對(duì)數(shù)據(jù)進(jìn)行哪些處理工作。功能——用例圖數(shù)據(jù)處理工作——建立領(lǐng)域模型74網(wǎng)站需求分析弄清楚網(wǎng)站要提供給用戶哪些功能,對(duì)數(shù)據(jù)進(jìn)行哪些處74網(wǎng)站功能用例圖75網(wǎng)站功能用例圖2175建立網(wǎng)站的領(lǐng)域模型系統(tǒng)涉及到哪些數(shù)據(jù),進(jìn)行哪些處理工作76書(shū)出版社作者讀者建立網(wǎng)站的領(lǐng)域模型系統(tǒng)涉及到哪些數(shù)據(jù),進(jìn)行哪些處理工作22書(shū)76網(wǎng)站系統(tǒng)設(shè)計(jì)解決軟件架構(gòu)與技術(shù)選型問(wèn)題示例網(wǎng)站采用多層架構(gòu)與ASP.NET+AJAX+SQLServer多層結(jié)構(gòu)是一種成熟的軟件系統(tǒng)架構(gòu),有許多種變形,它的基本思想是將系統(tǒng)劃分一定的層次,下層為上層提供特定的服務(wù),不允許跨層調(diào)用。每層的功能目前多采用組件化技術(shù)開(kāi)發(fā)完成。77網(wǎng)站系統(tǒng)設(shè)計(jì)解決軟件架構(gòu)與技術(shù)選型問(wèn)題2377示例網(wǎng)站的多層架構(gòu)78示例網(wǎng)站的多層架構(gòu)2478示例網(wǎng)站系統(tǒng)架構(gòu)詳解示例網(wǎng)站系統(tǒng)架構(gòu)詳解79業(yè)務(wù)邏輯層/數(shù)據(jù)存取層的設(shè)計(jì)業(yè)務(wù)邏輯層/數(shù)據(jù)存取層的設(shè)計(jì)80實(shí)體類設(shè)計(jì)方案根據(jù)領(lǐng)域分析的結(jié)果,結(jié)合實(shí)際情況,可以得出實(shí)體類的設(shè)計(jì)方案81BookBookRemark1n出于簡(jiǎn)化的目的,出版社和作者等其他對(duì)象不再創(chuàng)建單獨(dú)的實(shí)體類實(shí)體類設(shè)計(jì)方案根據(jù)領(lǐng)域分析的結(jié)果,結(jié)合實(shí)際情況,可以得出實(shí)體81數(shù)據(jù)庫(kù)表結(jié)構(gòu)根據(jù)實(shí)體類設(shè)計(jì)圖,可以很快地得出數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表結(jié)構(gòu):82再補(bǔ)充一個(gè)表,用于保存在前臺(tái)首頁(yè)顯示的書(shū)信息數(shù)據(jù)庫(kù)表結(jié)構(gòu)根據(jù)實(shí)體類設(shè)計(jì)圖,可以很快地得出數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表82有關(guān)數(shù)據(jù)庫(kù)表和實(shí)體類的設(shè)計(jì)方法牢記:先進(jìn)行領(lǐng)域分析,確定系統(tǒng)中要處理哪些數(shù)據(jù),并將這些數(shù)據(jù)抽象為實(shí)體類之后,再設(shè)計(jì)數(shù)據(jù)庫(kù)表。一般是一個(gè)類對(duì)應(yīng)一個(gè)表。如果類之間有關(guān)聯(lián),則表之間也應(yīng)該建立關(guān)聯(lián)。在設(shè)計(jì)和實(shí)現(xiàn)實(shí)體類時(shí),要注意以下兩點(diǎn):注意數(shù)據(jù)庫(kù)字段是有大小和長(zhǎng)度限制的各屬性應(yīng)給與一個(gè)初始值類名和表名,屬性名和字段名要一致除非數(shù)據(jù)信息內(nèi)容和關(guān)聯(lián)非常復(fù)雜導(dǎo)致實(shí)體類包含太多的屬性,不要讓一個(gè)類對(duì)應(yīng)多張數(shù)據(jù)庫(kù)表。數(shù)據(jù)庫(kù)表結(jié)構(gòu)一旦確定,不到萬(wàn)不得已,不要再進(jìn)行大的改動(dòng),因此,必須對(duì)各種情況進(jìn)行分析后進(jìn)行精心設(shè)計(jì)。83有關(guān)數(shù)據(jù)庫(kù)表和實(shí)體類的設(shè)計(jì)方法牢記:先進(jìn)行領(lǐng)域分析,確定系統(tǒng)83數(shù)據(jù)存取類設(shè)計(jì)——隔離原則示例網(wǎng)站的功能比較簡(jiǎn)單,主要就是實(shí)體類對(duì)象的增、刪、改和查四種操作,為此,設(shè)計(jì)若干個(gè)數(shù)據(jù)存取類來(lái)完成網(wǎng)站功能,其命名規(guī)則為:“實(shí)體類”+“Access”。數(shù)據(jù)存取類進(jìn)入的信息和返回的信息都是以實(shí)體類對(duì)象為主。84數(shù)據(jù)存取類在內(nèi)部調(diào)用來(lái)訪問(wèn)數(shù)據(jù)庫(kù)數(shù)據(jù)存取類使得上層模塊要訪問(wèn)數(shù)據(jù)時(shí),不再需要與打交道。數(shù)據(jù)存取類設(shè)計(jì)——隔離原則示例網(wǎng)站的功能比較簡(jiǎn)單,主要就是實(shí)84WEB服務(wù)層設(shè)計(jì)本示例網(wǎng)站中,將搜索圖書(shū)的功能使用WebService向外發(fā)布,由BookService類實(shí)現(xiàn)。85BookService只是在內(nèi)部直接調(diào)用業(yè)務(wù)邏輯層組件完成搜索圖書(shū)的功能,一般情況下,Web服務(wù)層的組件不需要直接調(diào)用來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。WEB服務(wù)層設(shè)計(jì)本示例網(wǎng)站中,將搜索圖書(shū)的功能使用WebS85界面層設(shè)計(jì)的基本原則本例中的界面層主要指的是頁(yè)面,以及聚合Web服務(wù)的WindowsForm應(yīng)用程序。對(duì)于網(wǎng)站中的頁(yè)面,要分類存放,不要全部丟在網(wǎng)站的根目錄中。充分利用已有的組件以搭積木的方式構(gòu)造用戶界面。通常將多個(gè)頁(yè)面重復(fù)出現(xiàn)的部分做成用戶控件以便復(fù)用。86界面層設(shè)計(jì)的基本原則本例中的界面層主要指的是頁(yè)面,以及聚合W86整個(gè)示例網(wǎng)站的總體結(jié)構(gòu)如下:87整個(gè)示例網(wǎng)站的總體結(jié)構(gòu)如下:3387示例網(wǎng)站開(kāi)發(fā)中的技術(shù)關(guān)鍵點(diǎn)示例網(wǎng)站開(kāi)發(fā)中的技術(shù)關(guān)鍵點(diǎn)88母版頁(yè)前臺(tái)母版頁(yè)定制頁(yè)眉和頁(yè)腳。后臺(tái)母版頁(yè)放置TreeView進(jìn)行導(dǎo)航:89前臺(tái)后臺(tái)所用的樣式表集中在App_Themes文件夾下的兩個(gè)主題中。示例網(wǎng)站在母版頁(yè)中直接引用它們。網(wǎng)頁(yè)布局的樣式表延續(xù)了以前系列課程中的設(shè)置。另一種方法是在每個(gè)單獨(dú)頁(yè)面的頁(yè)面指令中設(shè)置其Theme=“主題名稱”,會(huì)自動(dòng)加載其中的樣式表。母版頁(yè)前臺(tái)母版頁(yè)定制頁(yè)眉和頁(yè)腳。35前臺(tái)后臺(tái)所用的樣式表集中89用戶權(quán)限管理部分的實(shí)現(xiàn)使用“網(wǎng)站配置”設(shè)計(jì)兩個(gè)角色:Manager和Reader,并規(guī)定好訪問(wèn)規(guī)則。前臺(tái)兩個(gè)網(wǎng)頁(yè)、使用現(xiàn)成的登錄控件配合成員資格和角色管理機(jī)制進(jìn)行開(kāi)發(fā)。首頁(yè)的登錄面板使用LoginView為不同角色定制模板,使用LoginStatus、LoginName等現(xiàn)成控件快速搭建模板。后臺(tái)頁(yè)面:直接使用MemberShip和GridView實(shí)現(xiàn)用戶管理。90用戶權(quán)限管理部分的實(shí)現(xiàn)使用“網(wǎng)站配置”設(shè)計(jì)兩個(gè)角色:Mana90用戶權(quán)限管理功能的配置默認(rèn)情況下,成員資格對(duì)帳號(hào)的要求是比較嚴(yán)格的,比如要求密碼必須有7位,其中至少有一位是非數(shù)字等。上述配置放在機(jī)器的中。示例網(wǎng)站通過(guò)在中定制成員資格參數(shù),去掉了這些設(shè)置。91用戶權(quán)限管理功能的配置默認(rèn)情況下,成員資格對(duì)帳號(hào)的要求是比較91用戶控件設(shè)計(jì)示例網(wǎng)站使用用戶控件封裝可重用界面部分(用戶控件套用戶控件,前臺(tái)后臺(tái)一起用)92用戶控件設(shè)計(jì)示例網(wǎng)站使用用戶控件封裝可重用界面部分(用戶控件92用戶控件開(kāi)發(fā)分析::用于顯示單本書(shū),它接收一個(gè)Book對(duì)象,然后將其信息顯示在控件中??丶褂帽砀襁M(jìn)行定位。93:接收一個(gè)List<Book>,然后分兩列顯示圖書(shū)信息(Book對(duì)象)。使用DataList實(shí)現(xiàn),在其模板中嵌套SingleBook.ascx,并附加一個(gè)CheckBox,用屬性ShowCheckBox來(lái)控制其是否顯示。方法GetSelectedBookIDs返回用戶選擇的BookID集合。DataList不直接支持分頁(yè),因此需寫(xiě)代碼實(shí)現(xiàn)分頁(yè)。用戶控件開(kāi)發(fā)分析::用于顯示單本書(shū),它接收一個(gè)Book對(duì)象,93后臺(tái)錄入新書(shū)和修改圖書(shū)用到了同樣的一個(gè)用戶控件。當(dāng)錄入新書(shū)時(shí),此控件新建一個(gè)Book對(duì)象,當(dāng)修改圖書(shū)時(shí),從外界傳入一個(gè)Book對(duì)象(放在其BookObj屬性中),控件負(fù)責(zé)顯示Book對(duì)象到頁(yè)面上。使用一個(gè)IsAddNew屬性設(shè)置此控件所處的狀態(tài)(是錄新書(shū)還是改舊書(shū))。此控件不與數(shù)據(jù)庫(kù)打交道,而由頁(yè)面對(duì)象負(fù)責(zé)從其BookObj屬性中取出Book對(duì)象,然后調(diào)用數(shù)據(jù)存取對(duì)象將其保存或更新到數(shù)據(jù)庫(kù)中。94后臺(tái)錄入新書(shū)和修改圖書(shū)用到了同樣的一個(gè)用戶控件。4094圖書(shū)推薦級(jí)別顯示圖書(shū)的“星級(jí)”使用一般處理程序用GDI+生成,從QueryString中提取要繪制的星星個(gè)數(shù)。95圖書(shū)推薦級(jí)別顯示圖書(shū)的“星級(jí)”使用一般處理程序用GDI+生成95封面文件的保存用戶上傳的圖書(shū)封面,統(tǒng)一給其取個(gè)新名,為避免重名,采用GUID來(lái)生成。96stringFileExt=Path.GetExtension(FileUpload1.FileName);stringFileName=Guid.NewGuid().ToString()+FileExt;FileUpload1.SaveAs(Server.MapPath("~/CoverImageFiles")+"/"+FileName);bookobj.CoverImageUrl="~/CoverImageFiles/"+FileName;封面文件的保存用戶上傳的圖書(shū)封面,統(tǒng)一給其取個(gè)新名,為避免重96客戶端桌面應(yīng)用程序的開(kāi)發(fā)要點(diǎn)桌面應(yīng)用程序聚合示例網(wǎng)站發(fā)布的圖書(shū)查詢功能。當(dāng)生成WebService的代理對(duì)象后,可以通過(guò)設(shè)定此對(duì)象的url屬性來(lái)更改編譯時(shí)指定的WebServiceUrl。PictureBox控件有一個(gè)ImageLocation屬性可以獲取網(wǎng)絡(luò)上的圖片。97客戶端桌面應(yīng)用程序的開(kāi)發(fā)要點(diǎn)桌面應(yīng)用程序聚合示例網(wǎng)站發(fā)布的圖97示例網(wǎng)站的開(kāi)發(fā)流程示例網(wǎng)站的開(kāi)發(fā)流程98安排開(kāi)發(fā)流程的基本原則先開(kāi)發(fā)中間層,再開(kāi)發(fā)界面層99迭代開(kāi)發(fā):

每開(kāi)發(fā)完一個(gè)功能,馬上進(jìn)行測(cè)試,正常后才進(jìn)入下一個(gè)功能的開(kāi)發(fā)?;谟美?qū)動(dòng)的開(kāi)發(fā)方法:

一個(gè)功能一個(gè)功能地完成開(kāi)發(fā),先開(kāi)發(fā)重要的功能,再開(kāi)發(fā)次要的功能。優(yōu)先開(kāi)發(fā)被別人調(diào)用,不調(diào)用別人的組件和模塊。安排開(kāi)發(fā)流程的基本原則先開(kāi)發(fā)中間層,再開(kāi)發(fā)界面層45迭代開(kāi)99中間層開(kāi)發(fā)的工作安排建數(shù)據(jù)庫(kù)表。開(kāi)發(fā)實(shí)體類。實(shí)現(xiàn)數(shù)據(jù)存取

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論