版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Websharp引見孫亞民Part I 簡介一個工程的三個工程系統(tǒng)框架工程純技術業(yè)務工程測試工程軟件設計的目的穩(wěn)定可維護可擴展可晉級有利于團隊開發(fā)設計的原那么 高內聚和低耦合 內聚和耦合,包含了橫向和縱向 橫向的內聚和耦合,通常表達在系統(tǒng)的各個模塊、類之間的關系縱向的耦合,表達在系統(tǒng)的各個層次之間的關系 評判規(guī)范 系統(tǒng)的內聚和耦合度 層次的明晰和簡約性易于實現(xiàn)性可晉級和可擴展性開發(fā)效率能否有利于團隊協(xié)作開發(fā)性能Websharp的關注點 數(shù)據(jù)庫訪問O/R 映射AOP分布式訪問 典型的三層運用系統(tǒng)數(shù)據(jù)庫層 用戶界面層 運用效力層 運用效力數(shù)據(jù)庫用戶界面運用效力層的設計對于運用效力層來說,需求處置以
2、下幾個方面的問題: 數(shù)據(jù)的表示方式數(shù)據(jù),是軟件處置的對象。從某種程度上來說,“軟件,就是數(shù)據(jù)構造加算法的說法,是有一定意義的。在面向對象的系統(tǒng)中,數(shù)據(jù)是用類來表示的,代表了現(xiàn)實世界實體對象在軟件系統(tǒng)中的籠統(tǒng)。思索所謂的MVC方式,這個部分的類屬于M實體類的范疇。由于運用軟件通常會運用數(shù)據(jù)庫,數(shù)據(jù)庫中的數(shù)據(jù),可以看成是對象的耐久化保管。由于數(shù)據(jù)庫普通是關系型的,因此,這個部分,還需求思索類同關系型數(shù)據(jù)的映射,即通常所說的O-R MAP問題。數(shù)據(jù)的存取方式好像上述所說,軟件系統(tǒng)處置的實體對象數(shù)據(jù)需求耐久化保管數(shù)據(jù)庫中,因此,我們必需處置系統(tǒng)同數(shù)據(jù)庫的交互,以及數(shù)據(jù)的存取和轉換方式的問題。業(yè)務邏輯的
3、組織方式在面向對象的系統(tǒng)中,業(yè)務邏輯表現(xiàn)為對象之間的交互。有了上述的實體對象,以及對象的保管戰(zhàn)略,就可以將這些對象組合起來,編寫我們的業(yè)務邏輯處置程序。在業(yè)務邏輯的處置中,必需保證處置的正確性和完好性,這將會涉及到事務處置。通常,我們也會把業(yè)務邏輯封裝成組件的方式,以得到最大的可重用性。 運用效力層的設計業(yè)務效力的提供方式在我們完成系統(tǒng)的功能后,如何向客戶提供效力,是我們需求思索的問題。這里的客戶,不僅僅是指軟件的運用者,也包括調用的界面、其他程序等。例如,在一個基于Web的ASP.Net或JSP系統(tǒng)中,業(yè)務邏輯功能的客戶便是這些ASP.Net頁面或JSP頁面。業(yè)務邏輯組件應該經過什么方式,直
4、接的,或間接的,向這些客戶提供效力?層的部署和層間交互對于一個多層的運用軟件系統(tǒng)來說,尤其是大型的運用軟件系統(tǒng),通常需求把不同的部分部署在不同的邏輯或物理設備上。特別是一些基于Web的運用軟件系統(tǒng),其部署任務將涉及到Web效力器、組件效力器、數(shù)據(jù)庫效力器等不同的效力設備。在進展運用軟件架構的設計的時候,必需思索各種不同的部署方案。 完好的構造圖剪裁和取舍剪裁的必要數(shù)據(jù)實體層和實體控制層無法裁減 假設系統(tǒng)沒有復雜的業(yè)務邏輯,而只是一些數(shù)據(jù)的操作,或者業(yè)務邏輯特別少,那么,可以省略業(yè)務邏輯層,而將相關的功能移至實體控制層。假設不思索多種客戶端的情況,也不思索分布式部署的問題,系統(tǒng)的模塊又很少,不會
5、產生模塊間緊耦合的情況,那么,可以不運用業(yè)務外觀層,而讓用戶界面程序直接訪問業(yè)務功能。Ioffice Demo演示Ioffice Demo工程數(shù)據(jù)庫Web Service業(yè)務邏輯Websharp 框架Web Server閱讀器WinFormPart IIWebsharp的數(shù)據(jù)庫訪問層Websharp的數(shù)據(jù)庫訪問層基于ADO.Net進展再封裝,以簡化ADO.Net的運用數(shù)據(jù)訪問的主要接口是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的運用DataAccess d
8、ao=DataAccessFactory.CreateDataAccess(databaseProperty);db.Open();Int I = db.ExecuteNonQuery();/db.需求的操作db.Close(); Part III Websharp ORM數(shù)據(jù)實體的表示運用軟件系統(tǒng),從本質上來說,是計算機對現(xiàn)實世界的模擬?,F(xiàn)實世界中的實體對象,在軟件系統(tǒng)中,表現(xiàn)為需求處置的數(shù)據(jù)。在面向對象的系統(tǒng)中,這是經過“類和“對象來表示的。參考著名的“MVC方式,類可以分成實體類M、控制類C、和邊境類V,分別代表了實體對象、控制和界面顯示。系統(tǒng)中需求處置的數(shù)據(jù),在面向對象的系統(tǒng)中,屬于實
9、體類部分。在思索數(shù)據(jù)實體層的設計戰(zhàn)略的時候,我們需求把握以下要點:一致的數(shù)據(jù)表示方式。在一個系統(tǒng)中,數(shù)據(jù)的表示方式必需盡能夠一致,同時,在處置單個數(shù)據(jù)和多個數(shù)據(jù)的時候,處置方式盡能夠一致。由于數(shù)據(jù)通常是需求存儲到數(shù)據(jù)庫中,因此,良好的映射方法是必需的。處置好對象的粒度,即所謂的粗粒度對象、細粒度對象。普通例子 一個倉庫中的產品Product public class Productpublic string Name; /稱號public decimal Price; /價錢public int Count; /數(shù)量可以按照如下方法運用Product類:Product p=new Produc
10、t();/處置Product 普通例子一張入庫單可以運用如下定義 :public class Formpublic string ID; /入庫單編號public DateTime AddTime; /入庫時間public FormDetail FormDetails; /入庫單明細public class FormDetailpublic Product InProduct; /入庫產品public int Count; /入庫數(shù)量 對象集合的表示方法數(shù)組表示的方法,也可以運用容器來,需求一個類型轉換的操作ObjectCollection方法。這個方法同上面的方法類似,不同之處在于,為每個實
11、體類設計一個Collection類。例如,可以為FormDetail設計一個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ù)庫查詢中獲取的數(shù)據(jù)集作為數(shù)據(jù)處置對象J2EE的方法EntityBeanBMPCMP運用
12、XML來映射數(shù)據(jù)庫JDO的方法提供了一個相對“輕量級的方案采用普通的做法,編寫實體類經過一些強化器對這些類進展強化,以使其符合JDO的規(guī)范經過PersistenceManager來實現(xiàn)對象的耐久化儲存 Websharp的方法EntityData類 經過Attribute或XML配置文件的方式同數(shù)據(jù)庫映射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; 實體對象的獲取Schdule schdule = EntityManager.CreateObject(typeof(Schdule) as Schdule; 數(shù)據(jù)的存取目的是耐久化保管對象 存取的對象,可以是數(shù)據(jù)庫、普通文件、XML,其他任何方式 經過框架來執(zhí)行可以節(jié)省開發(fā)本錢在這個部分,以下兩個部分的類會顯得特別重要:對象關系映射的分析類,可以經過既定的方案完成對象關系的映射,確定數(shù)據(jù)存取方案數(shù)據(jù)庫支配類:根據(jù)映射關系,將數(shù)據(jù)準確的存儲到數(shù)據(jù)庫中,并且封裝不同數(shù)據(jù)庫之間的差別
15、。過程實例在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(); 事務處置和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è)務邏輯的處置 業(yè)務邏輯表現(xiàn)為對象之間的交互 根本上沒有方法提供一致的方式 但是,采用根本一致的戰(zhàn)略是非常必要的在業(yè)務邏輯處置中,處置的應該是對象,而不是直接同數(shù)據(jù)庫打交道 事務的處置基于數(shù)據(jù)庫銜接的事務 公用的事務處置效力: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è)務外觀層隔離系統(tǒng)功能的提供者和運用者 作為后臺邏輯處置和前端用戶界面的緩沖區(qū) 將用戶界面和系統(tǒng)業(yè)務邏輯處置分開,當業(yè)務邏輯發(fā)生變化時,不用修正客戶端程序使同一個業(yè)務邏輯可以處置不同的客戶端懇求。例如,可以將Facade設計成Web Service作為系統(tǒng)不同模塊之間的調用接口:Facade設計方式有利于工程團隊的分工協(xié)作。業(yè)務外觀層的代碼框架,在系統(tǒng)分析和設計完成后就可以完成,相當于在界面設計人員和邏輯設計人員之間簽署了一個協(xié)議雖然沒有實現(xiàn)任何邏輯,但使系統(tǒng)的開發(fā)更加有條理,更加簡明“任何問題,都可以經過引入一個中間層來得到簡化。 Demo
21、IofficePart IVWebsharp AOP系統(tǒng)的橫向構造和AOP 運用AOP技術的情景Authentication 權限Caching 緩存Context passing 內容傳送Error handling 錯誤處置Lazy loading懶加載Debugging調試logging, tracing, profiling and monitoring記錄跟蹤優(yōu)化校準Performance optimization性能優(yōu)化Persistence耐久化Resource pooling資源池Synchronization同步Transactions 事務運用Websharp AOP實現(xiàn)松
22、散耦合經過Case闡明權限校驗定義public class Securitypublic bool CheckRight(User currentUser , Model accessModel , OperationType operation)/校驗權限 調用場景public class BusinessClasspublic void BusinessMethod()Security s = new Security();if (!s. CheckRight()return ;/執(zhí)行業(yè)務邏輯 問題點不明晰的業(yè)務邏輯:從某種意義上來說,權限校驗過程并不是業(yè)務邏輯執(zhí)行的一部分,這個任務是屬于
23、系統(tǒng)的,但是,在這種情況下,我們不得不把系統(tǒng)的權限校驗過程和業(yè)務邏輯執(zhí)行過程摻雜在一同,呵斥代碼的混亂。代碼浪費:運用這種方法,我們必需一切的業(yè)務邏輯代碼中用Security類,使得同樣校驗的代碼充斥在整個軟件中,顯然不是很好的景象。緊耦合:運用這種方法,我們必需在業(yè)務邏輯代碼中顯式援用Security類,這就呵斥了業(yè)務邏輯代碼同Security類的緊耦合,這意味著,當Security發(fā)生變化時,例如,當系統(tǒng)進化時,需求對CheckRight的方法進展改動時,能夠會影響到一切援用代碼。下面一切的問題都是因此而來。不易擴展:在這里,我們只是在業(yè)務邏輯中添加了權限校驗,哪一天,當我們需求添加額外的
24、功能,例如日志記錄功能的時候,我們不得不同樣在一切的業(yè)務邏輯代碼中添加這個功能。不靈敏:有的時候,由于某些特定的需求,我們需求暫時制止,或者添加某項功能,采用傳統(tǒng)的如上述的做法,我們不得不采用修正源代碼的方式來實現(xiàn)。 Business類的改良AspectManaged(true)public class BusinessClass : AspectObjectpublic void BusinessMethod()/執(zhí)行業(yè)務邏輯/執(zhí)行業(yè)務邏輯 為系統(tǒng)添加一個SecurityAspect public class SecurityAspect : IAspectpublic void Execu
25、te(object paramList)if(!Security.CheckRight(.)throw new SecurityException(他沒有權限!); 配置信息 Websharp AOP的實現(xiàn)原理Proxy方式public class AspectProxy : RealProxy在WebsharpAspect中,當一個對象被標志為AspectManaged后,這個類的實例的創(chuàng)建過程,以及方法的調用會被WebsharpAspect控制。因此,當他在調用如下語句:BusinessClass bc = new BusinessClass();的時候,他得到的實踐上并不是Busines
26、sClass類的一個實例,而是他的一個代理。因此,當調用這個“實例的方法的時候,一切的調用都會被代理所捕獲 Part V Websharp Service Locator遠程過程調用技術多種遠程過程調用技術:Web Service.Net RemotingCorba Java Remoting有多少種效力器端技術,就有多少種客戶端訪問技術為什么沒有一種一致的方式?基于接口的編程基于效力的架構WSL的目的提供一個一致的效力訪問編程模型 開發(fā)人員只需求定義效力訪問接口,就可以運用一致的方式透明的訪問這些效力,而不用理睬這些效力之間的不同點??蚣軙詣由稍L問遠程效力需求的代理。 只需一個需求打交道
27、的接口public abstract class ServiceLocatorpublic static object FindService(string serviceName,Type clientInterface) 如何運用Websharp Service Locator 定義一個同他需求訪問的效力一致的接口當然,假設他的效力是實現(xiàn)某個接口的,可以直接運用該接口。接口的方法名和參數(shù)必需同效力類的方法名和參數(shù)一致。假設他的方法名和效力的方法名不一致,那么,可以運用ServiceMethodNameAttribute來指明效力的方法名。在配置文件按中注冊他需求訪問的效力。調用Servic
28、eLocator 的FindService方法.調用接口的方法。 Hello World的LocalAssembly例子 創(chuàng)建一個名為“EnterpriseClient的windows console 工程,參與Websharp.dll的援用。添加一個類,名為“HelloWorld ,然后添加一個名為“GetHello的方法,代碼如下:public class HelloWorld public string GetHello(string hello)return hello;添加一個名為 “IHelloWorld 的接口public interface IHelloWorldstring
29、GetHello(string hello);ServiceMethodName(GetHello)string GetHello2(string hello); 配置文件 調用代碼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(); 運轉結果Hello World 的WebServic
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年婚禮化妝造型合同
- 2024大數(shù)據(jù)中心存儲設備采購合同
- 2024年度分包合作協(xié)議書
- 中考狀語課件教學課件
- 2024年度版權返租及授權使用協(xié)議
- 2024年國際皮毛市場交易合同
- 鄉(xiāng)鎮(zhèn)防汛抗旱救災的應急預案(5篇)
- (2024版)灑水車團隊租賃合同(2024版)
- 2024年度軟件許可及技術支持服務合同
- 2024年度互聯(lián)網(wǎng)金融服務平臺合作協(xié)議
- 遼寧省大連市金普新區(qū)2024-2025學年七年級上學期11月期中英語試題(無答案)
- 生態(tài)文明學習通超星期末考試答案章節(jié)答案2024年
- 區(qū)病案質控中心匯報
- 期中測試卷(1-4單元)(試題)2024-2025學年四年級上冊數(shù)學人教版
- 教育局職業(yè)院校教師培訓實施方案
- 《萬維網(wǎng)服務大揭秘》課件 2024-2025學年人教版新教材初中信息技術七年級全一冊
- 2024年新華社招聘應屆畢業(yè)生及留學回國人員129人歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 人教版(2024新版)七年級上冊英語Unit 5單元測試卷(含答案)
- 北京市《配電室安全管理規(guī)范》(DB11T 527-2021)地方標準
- 生涯發(fā)展展示
- 第七講社會主義現(xiàn)代化建設的教育、科技、人才戰(zhàn)略教學課件
評論
0/150
提交評論