一個(gè)項(xiàng)目的三個(gè)工程ppt課件_第1頁(yè)
一個(gè)項(xiàng)目的三個(gè)工程ppt課件_第2頁(yè)
一個(gè)項(xiàng)目的三個(gè)工程ppt課件_第3頁(yè)
一個(gè)項(xiàng)目的三個(gè)工程ppt課件_第4頁(yè)
一個(gè)項(xiàng)目的三個(gè)工程ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩69頁(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)介

1、Websharp引見(jiàn)孫亞民Part I 簡(jiǎn)介一個(gè)工程的三個(gè)工程系統(tǒng)框架工程純技術(shù)業(yè)務(wù)工程測(cè)試工程軟件設(shè)計(jì)的目的穩(wěn)定可維護(hù)可擴(kuò)展可晉級(jí)有利于團(tuán)隊(duì)開(kāi)發(fā)設(shè)計(jì)的原那么 高內(nèi)聚和低耦合 內(nèi)聚和耦合,包含了橫向和縱向 橫向的內(nèi)聚和耦合,通常表達(dá)在系統(tǒng)的各個(gè)模塊、類之間的關(guān)系縱向的耦合,表達(dá)在系統(tǒng)的各個(gè)層次之間的關(guān)系 評(píng)判規(guī)范 系統(tǒng)的內(nèi)聚和耦合度 層次的明晰和簡(jiǎn)約性易于實(shí)現(xiàn)性可晉級(jí)和可擴(kuò)展性開(kāi)發(fā)效率能否有利于團(tuán)隊(duì)協(xié)作開(kāi)發(fā)性能Websharp的關(guān)注點(diǎn) 數(shù)據(jù)庫(kù)訪問(wèn)O/R 映射AOP分布式訪問(wèn) 典型的三層運(yùn)用系統(tǒng)數(shù)據(jù)庫(kù)層 用戶界面層 運(yùn)用效力層 運(yùn)用效力數(shù)據(jù)庫(kù)用戶界面運(yùn)用效力層的設(shè)計(jì)對(duì)于運(yùn)用效力層來(lái)說(shuō),需求處置以

2、下幾個(gè)方面的問(wèn)題: 數(shù)據(jù)的表示方式數(shù)據(jù),是軟件處置的對(duì)象。從某種程度上來(lái)說(shuō),“軟件,就是數(shù)據(jù)構(gòu)造加算法的說(shuō)法,是有一定意義的。在面向?qū)ο蟮南到y(tǒng)中,數(shù)據(jù)是用類來(lái)表示的,代表了現(xiàn)實(shí)世界實(shí)體對(duì)象在軟件系統(tǒng)中的籠統(tǒng)。思索所謂的MVC方式,這個(gè)部分的類屬于M實(shí)體類的范疇。由于運(yùn)用軟件通常會(huì)運(yùn)用數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中的數(shù)據(jù),可以看成是對(duì)象的耐久化保管。由于數(shù)據(jù)庫(kù)普通是關(guān)系型的,因此,這個(gè)部分,還需求思索類同關(guān)系型數(shù)據(jù)的映射,即通常所說(shuō)的O-R MAP問(wèn)題。數(shù)據(jù)的存取方式好像上述所說(shuō),軟件系統(tǒng)處置的實(shí)體對(duì)象數(shù)據(jù)需求耐久化保管數(shù)據(jù)庫(kù)中,因此,我們必需處置系統(tǒng)同數(shù)據(jù)庫(kù)的交互,以及數(shù)據(jù)的存取和轉(zhuǎn)換方式的問(wèn)題。業(yè)務(wù)邏輯的

3、組織方式在面向?qū)ο蟮南到y(tǒng)中,業(yè)務(wù)邏輯表現(xiàn)為對(duì)象之間的交互。有了上述的實(shí)體對(duì)象,以及對(duì)象的保管戰(zhàn)略,就可以將這些對(duì)象組合起來(lái),編寫(xiě)我們的業(yè)務(wù)邏輯處置程序。在業(yè)務(wù)邏輯的處置中,必需保證處置的正確性和完好性,這將會(huì)涉及到事務(wù)處置。通常,我們也會(huì)把業(yè)務(wù)邏輯封裝成組件的方式,以得到最大的可重用性。 運(yùn)用效力層的設(shè)計(jì)業(yè)務(wù)效力的提供方式在我們完成系統(tǒng)的功能后,如何向客戶提供效力,是我們需求思索的問(wèn)題。這里的客戶,不僅僅是指軟件的運(yùn)用者,也包括調(diào)用的界面、其他程序等。例如,在一個(gè)基于Web的ASP.Net或JSP系統(tǒng)中,業(yè)務(wù)邏輯功能的客戶便是這些ASP.Net頁(yè)面或JSP頁(yè)面。業(yè)務(wù)邏輯組件應(yīng)該經(jīng)過(guò)什么方式,直

4、接的,或間接的,向這些客戶提供效力?層的部署和層間交互對(duì)于一個(gè)多層的運(yùn)用軟件系統(tǒng)來(lái)說(shuō),尤其是大型的運(yùn)用軟件系統(tǒng),通常需求把不同的部分部署在不同的邏輯或物理設(shè)備上。特別是一些基于Web的運(yùn)用軟件系統(tǒng),其部署任務(wù)將涉及到Web效力器、組件效力器、數(shù)據(jù)庫(kù)效力器等不同的效力設(shè)備。在進(jìn)展運(yùn)用軟件架構(gòu)的設(shè)計(jì)的時(shí)候,必需思索各種不同的部署方案。 完好的構(gòu)造圖剪裁和取舍剪裁的必要數(shù)據(jù)實(shí)體層和實(shí)體控制層無(wú)法裁減 假設(shè)系統(tǒng)沒(méi)有復(fù)雜的業(yè)務(wù)邏輯,而只是一些數(shù)據(jù)的操作,或者業(yè)務(wù)邏輯特別少,那么,可以省略業(yè)務(wù)邏輯層,而將相關(guān)的功能移至實(shí)體控制層。假設(shè)不思索多種客戶端的情況,也不思索分布式部署的問(wèn)題,系統(tǒng)的模塊又很少,不會(huì)

5、產(chǎn)生模塊間緊耦合的情況,那么,可以不運(yùn)用業(yè)務(wù)外觀層,而讓用戶界面程序直接訪問(wèn)業(yè)務(wù)功能。Ioffice Demo演示Ioffice Demo工程數(shù)據(jù)庫(kù)Web Service業(yè)務(wù)邏輯Websharp 框架Web Server閱讀器WinFormPart IIWebsharp的數(shù)據(jù)庫(kù)訪問(wèn)層Websharp的數(shù)據(jù)庫(kù)訪問(wèn)層基于ADO.Net進(jìn)展再封裝,以簡(jiǎn)化ADO.Net的運(yùn)用數(shù)據(jù)訪問(wèn)的主要接口是DataAccess DataAccess接口的定義public interface DataAccess#region ExecuteNonQueryint ExecuteNonQuery(CommandTy

6、pe commandType, string commandText);.#endregion ExecuteNonQuery#region ExecuteDataSetDataSet ExecuteDataset(CommandType commandType, string commandText);DataSet ExecuteDataset(string commandText);.#endregion ExecuteDataSet#region ExecuteReaderIDataReader ExecuteReader(CommandType commandType, string

7、 commandText);.#endregion ExecuteReader#region ExecuteScalarobject ExecuteScalar(CommandType commandType, string commandText);.#endregion ExecuteScalar#region ExecuteXmlReaderXmlReader ExecuteXmlReader(CommandType commandType, string commandText);.#endregion ExecuteXmlReaderDataAccess的運(yùn)用DataAccess d

8、ao=DataAccessFactory.CreateDataAccess(databaseProperty);db.Open();Int I = db.ExecuteNonQuery();/db.需求的操作db.Close(); Part III Websharp ORM數(shù)據(jù)實(shí)體的表示運(yùn)用軟件系統(tǒng),從本質(zhì)上來(lái)說(shuō),是計(jì)算機(jī)對(duì)現(xiàn)實(shí)世界的模擬。現(xiàn)實(shí)世界中的實(shí)體對(duì)象,在軟件系統(tǒng)中,表現(xiàn)為需求處置的數(shù)據(jù)。在面向?qū)ο蟮南到y(tǒng)中,這是經(jīng)過(guò)“類和“對(duì)象來(lái)表示的。參考著名的“MVC方式,類可以分成實(shí)體類M、控制類C、和邊境類V,分別代表了實(shí)體對(duì)象、控制和界面顯示。系統(tǒng)中需求處置的數(shù)據(jù),在面向?qū)ο蟮南到y(tǒng)中,屬于實(shí)

9、體類部分。在思索數(shù)據(jù)實(shí)體層的設(shè)計(jì)戰(zhàn)略的時(shí)候,我們需求把握以下要點(diǎn):一致的數(shù)據(jù)表示方式。在一個(gè)系統(tǒng)中,數(shù)據(jù)的表示方式必需盡能夠一致,同時(shí),在處置單個(gè)數(shù)據(jù)和多個(gè)數(shù)據(jù)的時(shí)候,處置方式盡能夠一致。由于數(shù)據(jù)通常是需求存儲(chǔ)到數(shù)據(jù)庫(kù)中,因此,良好的映射方法是必需的。處置好對(duì)象的粒度,即所謂的粗粒度對(duì)象、細(xì)粒度對(duì)象。普通例子 一個(gè)倉(cāng)庫(kù)中的產(chǎn)品Product public class Productpublic string Name; /稱號(hào)public decimal Price; /價(jià)錢(qián)public int Count; /數(shù)量可以按照如下方法運(yùn)用Product類:Product p=new Produc

10、t();/處置Product 普通例子一張入庫(kù)單可以運(yùn)用如下定義 :public class Formpublic string ID; /入庫(kù)單編號(hào)public DateTime AddTime; /入庫(kù)時(shí)間public FormDetail FormDetails; /入庫(kù)單明細(xì)public class FormDetailpublic Product InProduct; /入庫(kù)產(chǎn)品public int Count; /入庫(kù)數(shù)量 對(duì)象集合的表示方法數(shù)組表示的方法,也可以運(yùn)用容器來(lái),需求一個(gè)類型轉(zhuǎn)換的操作ObjectCollection方法。這個(gè)方法同上面的方法類似,不同之處在于,為每個(gè)實(shí)

11、體類設(shè)計(jì)一個(gè)Collection類。例如,可以為FormDetail設(shè)計(jì)一個(gè)FormDetailsCollection類(C#):public class FormDetailsCollection: ArrayListpublic void Add(FormDetail detail)base.Add(detail);public new FormDetail thisint nIndexget return (FormDetail)basenIndex; 數(shù)據(jù)集的表示方法。采用這種方法,通常是直接把從數(shù)據(jù)庫(kù)查詢中獲取的數(shù)據(jù)集作為數(shù)據(jù)處置對(duì)象J2EE的方法EntityBeanBMPCMP運(yùn)用

12、XML來(lái)映射數(shù)據(jù)庫(kù)JDO的方法提供了一個(gè)相對(duì)“輕量級(jí)的方案采用普通的做法,編寫(xiě)實(shí)體類經(jīng)過(guò)一些強(qiáng)化器對(duì)這些類進(jìn)展強(qiáng)化,以使其符合JDO的規(guī)范經(jīng)過(guò)PersistenceManager來(lái)實(shí)現(xiàn)對(duì)象的耐久化儲(chǔ)存 Websharp的方法EntityData類 經(jīng)過(guò)Attribute或XML配置文件的方式同數(shù)據(jù)庫(kù)映射IPersistenceCapable接口和PersistenceCapable籠統(tǒng)類TableMap(Schdule,GUID)WebsharpEntityInclude(typeof(Schdule)public abstract class Schdule : PersistenceCap

13、ableColumnMap(GUID,DbType.String,)public abstract string GUIDget;set;ColumnMap(UserID,DbType.String,)public abstract string UserIDget;set;ColumnMap(StartTime,DbType.DateTime)public abstract DateTime StartTimeget;set;ColumnMap(EndTime,DbType.DateTime)public abstract DateTime EndTimeget;set;ColumnMap(

14、Title,DbType.String,)public abstract string Titleget;set; 實(shí)體對(duì)象的獲取Schdule schdule = EntityManager.CreateObject(typeof(Schdule) as Schdule; 數(shù)據(jù)的存取目的是耐久化保管對(duì)象 存取的對(duì)象,可以是數(shù)據(jù)庫(kù)、普通文件、XML,其他任何方式 經(jīng)過(guò)框架來(lái)執(zhí)行可以節(jié)省開(kāi)發(fā)本錢(qián)在這個(gè)部分,以下兩個(gè)部分的類會(huì)顯得特別重要:對(duì)象關(guān)系映射的分析類,可以經(jīng)過(guò)既定的方案完成對(duì)象關(guān)系的映射,確定數(shù)據(jù)存取方案數(shù)據(jù)庫(kù)支配類:根據(jù)映射關(guān)系,將數(shù)據(jù)準(zhǔn)確的存儲(chǔ)到數(shù)據(jù)庫(kù)中,并且封裝不同數(shù)據(jù)庫(kù)之間的差別

15、。過(guò)程實(shí)例在J2EE中的CMP JDO中的PersistenceManager Customer customer=new Customer();PersistenceManager PM=PMFactory.initialize();Pm.persist(customer);Websharp的PersistenceManager public bool AddSchdule(Schdule schdule) PersistenceManager pm = PersistenceManagerFactory.Instance().CreatePersistenceManager();trypm

16、.PersistNewObject(schdule);return true;catchreturn false;finallypm.Close(); 事務(wù)處置和Transaction接口PersistenceManager pm = PersistenceManagerFactory.Instance().CreatePersistenceManager();Transaction trans = pm.CurrentTransaction;trans.Begin();trypm.PersistNewObject(schdule);transmit();return true;catchtr

17、ans.Rollback();return false;finallypm.Close();業(yè)務(wù)邏輯的處置 業(yè)務(wù)邏輯表現(xiàn)為對(duì)象之間的交互 根本上沒(méi)有方法提供一致的方式 但是,采用根本一致的戰(zhàn)略是非常必要的在業(yè)務(wù)邏輯處置中,處置的應(yīng)該是對(duì)象,而不是直接同數(shù)據(jù)庫(kù)打交道 事務(wù)的處置基于數(shù)據(jù)庫(kù)銜接的事務(wù) 公用的事務(wù)處置效力:J2EE的容器,COM+Websharp的Transaction接口 public bool AddSchdule(Schdule schdule,string otherPeoples)if(!CheckSchdule(schdule)return false;Persisten

18、ceManager pm = PersistenceManagerFactory.Instance().CreatePersistenceManager();Transaction trans = pm.CurrentTransaction;trans.Begin();trypm.PersistNewObject(schdule);foreach(string otherPeople in otherPeoples)Schdule s = EntityManager.CreateObject(typeof(Schdule) as Schdule;s.GUID = Guid.NewGuid().

19、ToString();s.UserID = otherPeople;s.StartTime = schdule.StartTime;s.EndTime = schdule.StartTime;s.Title = schdule.Title;s.Description = schdule.Description;s.RemidTime = schdule.RemidTime;s.AddTime = DateTime.Now;s.Status = 0;pm.PersistNewObject(s);transmit();return true;catchtrans.Rollback();return

20、 false;finallypm.Close();業(yè)務(wù)外觀層隔離系統(tǒng)功能的提供者和運(yùn)用者 作為后臺(tái)邏輯處置和前端用戶界面的緩沖區(qū) 將用戶界面和系統(tǒng)業(yè)務(wù)邏輯處置分開(kāi),當(dāng)業(yè)務(wù)邏輯發(fā)生變化時(shí),不用修正客戶端程序使同一個(gè)業(yè)務(wù)邏輯可以處置不同的客戶端懇求。例如,可以將Facade設(shè)計(jì)成Web Service作為系統(tǒng)不同模塊之間的調(diào)用接口:Facade設(shè)計(jì)方式有利于工程團(tuán)隊(duì)的分工協(xié)作。業(yè)務(wù)外觀層的代碼框架,在系統(tǒng)分析和設(shè)計(jì)完成后就可以完成,相當(dāng)于在界面設(shè)計(jì)人員和邏輯設(shè)計(jì)人員之間簽署了一個(gè)協(xié)議雖然沒(méi)有實(shí)現(xiàn)任何邏輯,但使系統(tǒng)的開(kāi)發(fā)更加有條理,更加簡(jiǎn)明“任何問(wèn)題,都可以經(jīng)過(guò)引入一個(gè)中間層來(lái)得到簡(jiǎn)化。 Demo

21、IofficePart IVWebsharp AOP系統(tǒng)的橫向構(gòu)造和AOP 運(yùn)用AOP技術(shù)的情景Authentication 權(quán)限Caching 緩存Context passing 內(nèi)容傳送Error handling 錯(cuò)誤處置Lazy loading懶加載Debugging調(diào)試logging, tracing, profiling and monitoring記錄跟蹤優(yōu)化校準(zhǔn)Performance optimization性能優(yōu)化Persistence耐久化Resource pooling資源池Synchronization同步Transactions 事務(wù)運(yùn)用Websharp AOP實(shí)現(xiàn)松

22、散耦合經(jīng)過(guò)Case闡明權(quán)限校驗(yàn)定義public class Securitypublic bool CheckRight(User currentUser , Model accessModel , OperationType operation)/校驗(yàn)權(quán)限 調(diào)用場(chǎng)景public class BusinessClasspublic void BusinessMethod()Security s = new Security();if (!s. CheckRight()return ;/執(zhí)行業(yè)務(wù)邏輯 問(wèn)題點(diǎn)不明晰的業(yè)務(wù)邏輯:從某種意義上來(lái)說(shuō),權(quán)限校驗(yàn)過(guò)程并不是業(yè)務(wù)邏輯執(zhí)行的一部分,這個(gè)任務(wù)是屬于

23、系統(tǒng)的,但是,在這種情況下,我們不得不把系統(tǒng)的權(quán)限校驗(yàn)過(guò)程和業(yè)務(wù)邏輯執(zhí)行過(guò)程摻雜在一同,呵斥代碼的混亂。代碼浪費(fèi):運(yùn)用這種方法,我們必需一切的業(yè)務(wù)邏輯代碼中用Security類,使得同樣校驗(yàn)的代碼充斥在整個(gè)軟件中,顯然不是很好的景象。緊耦合:運(yùn)用這種方法,我們必需在業(yè)務(wù)邏輯代碼中顯式援用Security類,這就呵斥了業(yè)務(wù)邏輯代碼同Security類的緊耦合,這意味著,當(dāng)Security發(fā)生變化時(shí),例如,當(dāng)系統(tǒng)進(jìn)化時(shí),需求對(duì)CheckRight的方法進(jìn)展改動(dòng)時(shí),能夠會(huì)影響到一切援用代碼。下面一切的問(wèn)題都是因此而來(lái)。不易擴(kuò)展:在這里,我們只是在業(yè)務(wù)邏輯中添加了權(quán)限校驗(yàn),哪一天,當(dāng)我們需求添加額外的

24、功能,例如日志記錄功能的時(shí)候,我們不得不同樣在一切的業(yè)務(wù)邏輯代碼中添加這個(gè)功能。不靈敏:有的時(shí)候,由于某些特定的需求,我們需求暫時(shí)制止,或者添加某項(xiàng)功能,采用傳統(tǒng)的如上述的做法,我們不得不采用修正源代碼的方式來(lái)實(shí)現(xiàn)。 Business類的改良AspectManaged(true)public class BusinessClass : AspectObjectpublic void BusinessMethod()/執(zhí)行業(yè)務(wù)邏輯/執(zhí)行業(yè)務(wù)邏輯 為系統(tǒng)添加一個(gè)SecurityAspect public class SecurityAspect : IAspectpublic void Execu

25、te(object paramList)if(!Security.CheckRight(.)throw new SecurityException(他沒(méi)有權(quán)限!); 配置信息 Websharp AOP的實(shí)現(xiàn)原理Proxy方式public class AspectProxy : RealProxy在WebsharpAspect中,當(dāng)一個(gè)對(duì)象被標(biāo)志為AspectManaged后,這個(gè)類的實(shí)例的創(chuàng)建過(guò)程,以及方法的調(diào)用會(huì)被WebsharpAspect控制。因此,當(dāng)他在調(diào)用如下語(yǔ)句:BusinessClass bc = new BusinessClass();的時(shí)候,他得到的實(shí)踐上并不是Busines

26、sClass類的一個(gè)實(shí)例,而是他的一個(gè)代理。因此,當(dāng)調(diào)用這個(gè)“實(shí)例的方法的時(shí)候,一切的調(diào)用都會(huì)被代理所捕獲 Part V Websharp Service Locator遠(yuǎn)程過(guò)程調(diào)用技術(shù)多種遠(yuǎn)程過(guò)程調(diào)用技術(shù):Web Service.Net RemotingCorba Java Remoting有多少種效力器端技術(shù),就有多少種客戶端訪問(wèn)技術(shù)為什么沒(méi)有一種一致的方式?基于接口的編程基于效力的架構(gòu)WSL的目的提供一個(gè)一致的效力訪問(wèn)編程模型 開(kāi)發(fā)人員只需求定義效力訪問(wèn)接口,就可以運(yùn)用一致的方式透明的訪問(wèn)這些效力,而不用理睬這些效力之間的不同點(diǎn)。框架會(huì)自動(dòng)生成訪問(wèn)遠(yuǎn)程效力需求的代理。 只需一個(gè)需求打交道

27、的接口public abstract class ServiceLocatorpublic static object FindService(string serviceName,Type clientInterface) 如何運(yùn)用Websharp Service Locator 定義一個(gè)同他需求訪問(wèn)的效力一致的接口當(dāng)然,假設(shè)他的效力是實(shí)現(xiàn)某個(gè)接口的,可以直接運(yùn)用該接口。接口的方法名和參數(shù)必需同效力類的方法名和參數(shù)一致。假設(shè)他的方法名和效力的方法名不一致,那么,可以運(yùn)用ServiceMethodNameAttribute來(lái)指明效力的方法名。在配置文件按中注冊(cè)他需求訪問(wèn)的效力。調(diào)用Servic

28、eLocator 的FindService方法.調(diào)用接口的方法。 Hello World的LocalAssembly例子 創(chuàng)建一個(gè)名為“EnterpriseClient的windows console 工程,參與Websharp.dll的援用。添加一個(gè)類,名為“HelloWorld ,然后添加一個(gè)名為“GetHello的方法,代碼如下:public class HelloWorld public string GetHello(string hello)return hello;添加一個(gè)名為 “IHelloWorld 的接口public interface IHelloWorldstring

29、GetHello(string hello);ServiceMethodName(GetHello)string GetHello2(string hello); 配置文件 調(diào)用代碼public static void Main(string args)IHelloWorld hello= ServiceLocator.FindService(HelloWorld,typeof(IHelloWorld) as IHelloWorld;Console.WriteLine(hello.GetHello(Hello World);Console.WriteLine(hello.GetHello2(Hello again);Console.ReadLine(); 運(yùn)轉(zhuǎn)結(jié)果Hello World 的WebServic

溫馨提示

  • 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)論