1、Microsoft .NET 企業應用系統架構與設計模式,林耀珍 技術總監 第三波資訊,Microsoft .NET 技術代言人,林耀珍,經歷 第三波資訊 技術總監 育碁數位科技 總經理 專業認證與專長 微軟 .NET 技術 軟體開發流程,資訊系統規劃 Microsoft MCSD/MCSE/MCDBA 物件導向技術,Rational OOAD 認證講師 Lotus Notes principle CLP/CLI J2EE,大綱,前言 企業應用系統架構介紹 使用者介面設計模式 商業元件設計模式 資料元件設計模式與最佳實務,機會,軟體的需求持續成長 自動化 工業, 商業 硬體加值 通訊, 電視,
2、 家庭伺服器 數位內容 Beyond Data Data, Doc, MM 人機介面 手寫, 語音 more 對人力的需求龐大 精密複雜的工作 自動化程度低,挑戰,時間有限 經費有限 系統需求複雜 技術複雜 環境變化迅速 使用者心意不定 人力有限(數量與品質),威脅,全球化軟體產業分工 全體軟體開發工程師800萬人 美國 印度 中國大陸,趨勢,硬體與通訊速度提昇,價格下跌 功能強大的軟體平台日益普及 Thanks To Microsoft and Other Vendors 全球化產業分工 icroTrend Know-How的累積與自動化 Domain Know-how Process Pa
3、tterns Architecture patterns Design patterns Coding template Reusable Components,跨越鴻溝的橋樑 Architecture, Design and Process,Object Oriented/Component/Framework/Platform Corner stone,大綱,前言 企業應用系統架構與MVC設計模式介紹 使用者介面設計模式 商業元件設計模式 資料元件設計模式與最佳實務,應用系統架構,Operational Management,Security,Communication,Patterns
4、& Practices,Caching,Data Format & exchange,任何事物都有其架構,而且越簡易越好 架構必須能够成長與調適,不然就要重建,應用系統架構,UI Components:操作模式、資料安排、美觀 User Process Components:業務操作流程 Service Interfaces:亦稱為Faade Layer Business Components:運算邏輯 Business Entities:負責資料儲存的元件 Business workflows:跨系統服務的流程整合 Data Access logic Components:存取資料庫 Ser
5、vice Agents:呼叫其他系統服務,建立程式架構,VS .NET Solution,MVC Design Paradigm,問題: 傳統的程式混合畫面、畫面流程、商業邏輯、與資料庫存取等功能,違反模組化設計原則 解決方案: Model: 資料與商業邏輯 View: 展現資料的畫面 Controller: 接受 user request, 呼叫適當的 Model 執行工作,然後顯示展現結果的畫面 結果 模組分工明確 成為 design 的基本原則 應用廣泛,例如增加 Data access 元件分離 Business object 與資料存取,MVC 設計原則,View,Controlle
6、r,Data,Model,Data Access,Model: 資料與商業邏輯 View: 展現資料的畫面 Controller: 接受 user request, 呼叫適當的 Model 執行工作,然後顯示展現結果的畫面,大綱,前言 企業應用系統架構介紹 設計使用者介面元件與設計模式 設計商業元件與設計模式 設計資料存取元件與設計模式,設計使用者介面元件,Operational Management,Security,Communication,Patterns & Practices,Caching,Data Format & exchange,Application Architectu
7、re is the most important design pattern.,Front Controller設計模式,適用於複雜的網站設計 允許動態設定 View, Navigation flow, Controller 優點 高度模組化,大幅降低重複的程式碼 集中 Business logic 與 Data access 適合對 Controller, BO, DO 做單元測試 可協調 multiple view 串聯互動 彈性應用 Logical view 與 Physical view 缺點 複雜 動態產生物件損失效能,Cache可降低痛苦,User Interface Proce
8、ss Application Block,目標:建立簡明、具延展性的UIP架構 需求: 多層式應用程式架構 適用於 Windows client、Web client、devices 可以儲存使用者狀態 可調整 UI 流程,但不必修改 code 設計要點 不同的 Client 端使用一致的程式模式 分離 UI Navigation flow 與 UI Components (form/page) 分離 State management 與 UI Components,UIP Application Block,設計 Views 與 Navigation flow,設定 Navigation f
9、low,UIP 設計模型,Configuration File,Business entity - DataSet,Navigation,當Initialize controller時設定Navigate() handler,設計 Controller,Controller 協調 Views,BO,DO 與 UIP Framework,Client agent設計模式,統一Windows/Web Form存取Business components的服務介面 Isolate presentation layer from service changes,大綱,前言 企業應用系統架構介紹 設計使用
10、者介面元件與設計模式 設計商業元件與設計模式 設計資料存取元件與設計模式,設計商業元件,Operational Management,Security,Communication,Patterns & Practices,Caching,Data Format & exchange,Application Architecture is the most important design pattern.,規劃 Business Objects 的功能,從需求分析規劃系統功能,並指派功能給適當的商業元件,功能需求 登入 瀏覽產品目錄 加入物品至購物車,數量固定為1 檢視購物車內容 Check
11、out order 顯示checkout結果非功能性需求 對密碼加密,Business Entity的型式,DataReader:具有最快的讀取速度,用於Forward-ReadOnly的場合,不具有OO概念 Generic DataSet:On-Memory database Typed DataSet:兼具有Generic DataSet的優點與物件導向程式設計的優點,多一些overhead XML:可於執行查詢直接傳回XmlReader,或由DataSet做資料轉換 Business entity class:最符合物件導向程式概念,程式邏輯簡單,但資料轉型的overhead最大。處理大
12、量或複雜的related entities時,必須小心處理以滿足效能要求,設計 Business Entity,設計 DataSet CartDS CategoryDS ProductDS CustomerDS,設計Business Rule Component,Service interface設計模式,Faade design pattern 目標:子系統提供單一介面給用戶端 問題:子系統內的class分別提供部分功能,用戶端必須呼叫個別的class,致使兩層間連結複雜,不易維護,違反Encapsulation原則 效果:簡化設計,易於維護,Faade layer & Client Age
13、nt,Agent,Svc-2,Svc-3,Svc-1,Faade layer,Web service,Windows/Web/PDA/Mobile Client,Remotable Component,Serviced Component,UDDI,discover,publish,Client,HTTP TCP Remoting,COM +,Client,TCP DCOM,Business Logic,建立高可再用性的商業元件,HTTP SOAP WSDL,Add Web service,Add an ASP.NET Web service project Add ref to busine
14、ssFacade, common, Asmx delegates request to businessFacadeThe quickest way Copy codes from ClientAgent.cs Add WebMethod for each method,大綱,前言 企業應用系統架構介紹 設計使用者介面元件與設計模式 設計商業元件與設計模式 設計資料存取元件與設計模式,設計資料存取元件,Operational Management,Security,Communication,Patterns & Practices,Caching,Data Format & exchange
15、,設計資料存取元件,影響效能的關鍵之一 使用Object/Component進行設計符合自然的思考模式 RDB的原理為集合運算(Set) 當大量的資料儲存RDBMS時,必須將單次的大量運算移至資料端進行批次運算 但若是對大量資料進行多次運算,則應將之移入程式 AddOrder元件,設計資料存取元件的考量因素,資料必須在各層元件中傳遞,所以需要Serializable 考慮存取頻率與資料量 考慮read-only或mutable 是否需要Cache Business entity與table schema不一定相同 存取大量資料或大量同時上線作業時必須有良好的效率 是否提供存取XML資料的功能,
16、esp. 在跨平台或系統整合時的需求 在Client端是否必須安裝,及最佳的安裝方法為何? 符合物件導向概念的資料元件,使程式單純化,且可做編譯時的型態檢查,減少錯誤機會,最佳實務(Best Practices),儘量減少資料元件的型態,簡化開發及維護 如果資料以檔案方式儲存,應使用xml格式 Data Access元件採用stateless模式 每一個Data Access元件一次只存取一個資料來源 Data Access元件不可呼叫其他的Data Access元件 Data Access元件對應business Component,不是對應Table Data Access元件使用stor
17、ed procedures與RDB溝通 Data Access元件不處理Transaction 使用Connection-oriented object時,必須儘速取出資料後釋放connection. 大量資料的批次作業,可避開物件導向程式處理模式,Data Access Application Block,目標:減少重複的程式碼 需求: .NET Framework v1.1 & ADO.NET 呼叫 Sql Statement 或 Store procedure 傳回 void, int, DataReader, DataSet, XmlReader 設計要點 從 DB 擷取 Parame
18、ters, 並 Cache Parameter set 可以設定 Transaction,Data Access Application Block,Data Access Application Block,Data Access Component,SQL Server,SqlHelper,ExecuteNonQuery,SqlHelperParameterCache,ExecuteDataset,ExecuteReader,ExecuteScalar,ExecuteXmlReader,CacheParameterSet,GetCachedParameterSet,GetSpParamet
19、erSet,int,DataSet,SqlDataReader,object,XmlReader,SqlParameter ,Transact-SQL or Stored Procedure,實作 Data Access Object,自行設計或使用使用 Data Application Block,reader = SqlHelper.ExecuteReader( this.connectionString, CommandType.StoredProcedure,“SelectProductById“, new SqlParameter new SqlParameter(“ProductI
20、D“, productId) );SqlHelperExtension.Fill( reader, productDS, “product“, 0, 1 );,sqlConnection1 = new SqlConnection(); sqlCommand1 = new SqlCommand(); sqlConnection1.ConnectionString = this.connectionString;sqlCommand1.CommandText = “dbo.SelectProductById“; sqlCommand1.CommandType =CommandType.Stored
21、Procedure; sqlCommand1.Connection = this.sqlConnection1; sqlCommand1.Parameters.Add(new SqlParameter(“RETURN_VALUE“,. sqlCommand1.Parameters.Add(new SqlParameter(“ProductID“, .,總結,遵循 .NET 應用程式架構 善用 .NET Framework 運用適當的軟體開發流程 For team-work project 選擇適當的 Design Patterns 設計具有彈性的架構 Key to reuse The Open
22、-Closed Principle Open For Extension Closed For Modification,相關場次,.NET應用程式效能調教與安全典範 分散式應用程式設計典範 Part I, II 如何透過Web service建立異質平台的互通性 深入.NET Web service 探索 Web Service Enhancements 2.0 J2EE vs. .NET Enterprise Services,final thoughts, 2003 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.,