課程簡介
軟件架構的概念:構件及協(xié)作關系;典型的軟件架構介紹:分層架構及其派生類型;面向服務的架構設計:SOA;面向云的架構設計;用UML圖表達軟件架構;設計項跟蹤及其架構重構;用代碼表達架構;數(shù)據(jù)訪問設計;業(yè)務邏輯設計;界面邏輯設計;.NET和C++互操作設計...等內容。
目標收益
培訓對象
課程大綱
軟件架構的概念:構件及協(xié)作關系 ? |
- 架構關注點,定義構件邊界+構件之間通信 ? - 構件的描述:4+1視圖 ? - 非功能性需求:可用性、可靠性、魯棒性、可維護性,可擴展性,可測性,性能,可復用性、模塊化、易部署性等 ? - 架構設計方法:場景驅動的迭代架構設計 ? - 架構師角色:輸入需求,輸出架構 ? - 討論:如何才能成為一名合格的架構師? ? - 案例導入:必應詞典的架構介紹 |
典型的軟件架構介紹:分層架構及其派生類型 |
- 一般分層模型:數(shù)據(jù),業(yè)務+界面 - 典型的分層模型:B/S架構,C/S架構和富客戶端應用 - 實例:JSP/JSF應用,ASP.NET應用,AJAX應用,REST風格應用 - 練習:開發(fā)一個簡單的B/S應用 - 案例討論:必應詞典的分層架構 |
面向服務的架構設計:SOA ? |
- 架構的核心元素:容器,組件,接口和通信 ? - 理解容器:基礎服務,承載組件,容器間通信 ? - 典型的容器:.NET WCF容器,J2EE應用服務器如GlassFish ,COM容器 ? - 理解組件:使用容器,實現(xiàn)接口,組件間通信 ? - 非侵入式設計:使用批注擴展組件/容器 ? - 典型的組件:WEB服務,.NET WCF服務 ,EJB Bean(消息,會話)等,COM組件,CORBA組件等 ? - 理解接口:約定功能,服務接口,遠程/本地接口 ? - 練習:編寫一個簡單的基于SOA的C/S應用 ? - 案例討論:必應詞典中的服務 |
面向云的架構設計 |
- 云架構:云為容器,提供運算,存儲和通信等基礎服務 - 公有云應用:數(shù)據(jù),邏輯,界面都由公共云承載 - 混合云應用:部分數(shù)據(jù)/邏輯本地服務器+公有云; - 云應用的消息總線模型:將公有云模擬為本地資源統(tǒng)一通信 - 練習:設計,實現(xiàn)并部署一個基于SOA的B/S架構的云應用 - 案例討論:從WEB詞典到云詞典 |
用UML圖表達軟件架構 ? |
- UML圖概述:7種UML圖及繪制工具(例如VS2010的架構師工具/ROSE繪圖工具/VISIO繪圖工具) ? - 用例視圖:表達需求,定義系統(tǒng)邊界 ? - 邏輯視圖:類及其關系,類的組織 ? - 進程視圖:表達運行時對象間的協(xié)作關系,活動圖,序列圖 ? - 部署視圖:描述物理組件如何分發(fā)配置到服務器 ? - 開發(fā)視圖:描述在開發(fā)環(huán)境中軟件的靜態(tài)組織結構 ? - 練習:用UML圖描述一個SOA小應用架構 |
性能設計 |
- 主要性能指標:平均響應時間、吞吐量或并發(fā)數(shù)、持續(xù)高速性 - 影響性能的主要因素:算法,實現(xiàn),數(shù)據(jù)庫設計,通信 - 性能瓶頸探測:性能探測工具及探測報告 - 練習:用性能探測工具探測性能,壓力測試及內存消耗 - 討論:必應詞典的性能瓶頸及其對策 |
設計項跟蹤及其架構重構 ? |
- 迭代設計(小步快跑模式):架構的重構 ? - 設計項版本管理 ? - 設計項狀態(tài)跟蹤:設計項映射到代碼和測試用例 ? - 相關工具:微軟團隊項目服務器(Team Foundation Server)/其他工具 ? - 練習:利用源碼管理工具跟蹤架構設計相關項 ? - 討論:必應詞典的架構設計過程 |
用代碼表達架構 |
- 設計元素:類,接口,模板,包 - 利用面向對象編程語言:c#,Java,c++ - 依賴抽象的設計原則:針對抽象編程,封裝變化 - 使用設計模式:創(chuàng)建型模式、結構型模式和行為型模式 - 練習:用抽象類和接口定義一個搜索系統(tǒng)的架構 |
數(shù)據(jù)訪問設計: |
- 數(shù)據(jù)存儲設計:文件,數(shù)據(jù)庫,內存,… - 數(shù)據(jù)實體定義:主鍵,外鍵,二進制數(shù)據(jù),約束 - 數(shù)據(jù)訪問層設計:數(shù)據(jù)表內存表間映射 - 使用數(shù)據(jù)訪問框架:LINQ 2 SQL/數(shù)據(jù)實體框架,JAVA 可持久化框架(JPA),ADO.NET 數(shù)據(jù)實體框架 - 練習:使用數(shù)據(jù)訪問框架操作數(shù)據(jù)庫 |
業(yè)務邏輯設計: ? |
- 業(yè)務邏輯設計工具:工作流 ? - 將業(yè)務邏輯包裝為服務 ? - 確定業(yè)務邏輯設計正確性:單元測試 ? - 練習:用工作流實現(xiàn)一段業(yè)務邏輯,并驗證實現(xiàn)的正確性 |
并行應用設計: |
- 識別并行任務:Map-Reduce模型 - 并行模式:生產-消費模式,并行,互斥和同步 - 并行實現(xiàn):多線程,線程池,并行庫 - 練習: 用工作流設計并行邏輯 |
界面邏輯設計 ? |
- MVC模式:模型控制視圖模式設計界面 ? - 界面邏輯:輸入驗證,修改模型,執(zhí)行邏輯,更新界面 ? - 實例分析:MFC的界面邏輯,JSF的界面邏輯,AJAX應用的界面邏輯,ASP.NE的界面 邏輯 ? - 練習:重構一段界面代碼,使其滿足MVC模式 |
基于測試和基于合約的設計:測試驅動設計和合約驅動的設計 |
- 測試驅動開發(fā)模型:紅綠紅模型 - 測試驅動設計:以通過測試用例為驅動力迭代增量完成架構 - 合約的概念:對實現(xiàn)方和調用方間各自的約束 - 基于合約的設計:前置條件,后置條件和不變式 - 練習:基于合約設計一個有理數(shù)類 |
設計可擴展的框架 ? |
- 設計擴展點:虛方法,委托(實踐),依賴項(參數(shù)依賴,成員依賴,類型依賴) - 可擴展框架:使用基于聲明和配置的動態(tài)注入依賴 ? - 實例分析:.NET的動態(tài)擴展框架,Java Spring框架 ? - 討論:必應詞典的可擴展性 |
安全性設計 |
- 對威脅建模 - 網絡安全,服務器安全和軟件系統(tǒng)安全 - 常見安全漏洞及防范:拒絕服務,SQL依賴注入,跨站點腳本調用,緩沖區(qū)溢出,數(shù)據(jù)泄密 - 討論:必應詞典針對安全性的設計 |
.NET和C++互操作設計 ? |
- 可選的技術評價:DLL包裝,COM和托管C++ ? - 互操作時的系統(tǒng)邊界設計 |
物理部署設計 |
- 部署單元:組件,數(shù)據(jù)庫組件,數(shù)據(jù)處理組件,通信組件,中間件 - 部署配置設計:定義配置項 - 驗證物理部署設計:使用虛擬機或TFS 實驗室 |
軟件架構的概念:構件及協(xié)作關系 ? - 架構關注點,定義構件邊界+構件之間通信 ? - 構件的描述:4+1視圖 ? - 非功能性需求:可用性、可靠性、魯棒性、可維護性,可擴展性,可測性,性能,可復用性、模塊化、易部署性等 ? - 架構設計方法:場景驅動的迭代架構設計 ? - 架構師角色:輸入需求,輸出架構 ? - 討論:如何才能成為一名合格的架構師? ? - 案例導入:必應詞典的架構介紹 |
典型的軟件架構介紹:分層架構及其派生類型 - 一般分層模型:數(shù)據(jù),業(yè)務+界面 - 典型的分層模型:B/S架構,C/S架構和富客戶端應用 - 實例:JSP/JSF應用,ASP.NET應用,AJAX應用,REST風格應用 - 練習:開發(fā)一個簡單的B/S應用 - 案例討論:必應詞典的分層架構 |
面向服務的架構設計:SOA ? - 架構的核心元素:容器,組件,接口和通信 ? - 理解容器:基礎服務,承載組件,容器間通信 ? - 典型的容器:.NET WCF容器,J2EE應用服務器如GlassFish ,COM容器 ? - 理解組件:使用容器,實現(xiàn)接口,組件間通信 ? - 非侵入式設計:使用批注擴展組件/容器 ? - 典型的組件:WEB服務,.NET WCF服務 ,EJB Bean(消息,會話)等,COM組件,CORBA組件等 ? - 理解接口:約定功能,服務接口,遠程/本地接口 ? - 練習:編寫一個簡單的基于SOA的C/S應用 ? - 案例討論:必應詞典中的服務 |
面向云的架構設計 - 云架構:云為容器,提供運算,存儲和通信等基礎服務 - 公有云應用:數(shù)據(jù),邏輯,界面都由公共云承載 - 混合云應用:部分數(shù)據(jù)/邏輯本地服務器+公有云; - 云應用的消息總線模型:將公有云模擬為本地資源統(tǒng)一通信 - 練習:設計,實現(xiàn)并部署一個基于SOA的B/S架構的云應用 - 案例討論:從WEB詞典到云詞典 |
用UML圖表達軟件架構 ? - UML圖概述:7種UML圖及繪制工具(例如VS2010的架構師工具/ROSE繪圖工具/VISIO繪圖工具) ? - 用例視圖:表達需求,定義系統(tǒng)邊界 ? - 邏輯視圖:類及其關系,類的組織 ? - 進程視圖:表達運行時對象間的協(xié)作關系,活動圖,序列圖 ? - 部署視圖:描述物理組件如何分發(fā)配置到服務器 ? - 開發(fā)視圖:描述在開發(fā)環(huán)境中軟件的靜態(tài)組織結構 ? - 練習:用UML圖描述一個SOA小應用架構 |
性能設計 - 主要性能指標:平均響應時間、吞吐量或并發(fā)數(shù)、持續(xù)高速性 - 影響性能的主要因素:算法,實現(xiàn),數(shù)據(jù)庫設計,通信 - 性能瓶頸探測:性能探測工具及探測報告 - 練習:用性能探測工具探測性能,壓力測試及內存消耗 - 討論:必應詞典的性能瓶頸及其對策 |
設計項跟蹤及其架構重構 ? - 迭代設計(小步快跑模式):架構的重構 ? - 設計項版本管理 ? - 設計項狀態(tài)跟蹤:設計項映射到代碼和測試用例 ? - 相關工具:微軟團隊項目服務器(Team Foundation Server)/其他工具 ? - 練習:利用源碼管理工具跟蹤架構設計相關項 ? - 討論:必應詞典的架構設計過程 |
用代碼表達架構 - 設計元素:類,接口,模板,包 - 利用面向對象編程語言:c#,Java,c++ - 依賴抽象的設計原則:針對抽象編程,封裝變化 - 使用設計模式:創(chuàng)建型模式、結構型模式和行為型模式 - 練習:用抽象類和接口定義一個搜索系統(tǒng)的架構 |
數(shù)據(jù)訪問設計: - 數(shù)據(jù)存儲設計:文件,數(shù)據(jù)庫,內存,… - 數(shù)據(jù)實體定義:主鍵,外鍵,二進制數(shù)據(jù),約束 - 數(shù)據(jù)訪問層設計:數(shù)據(jù)表內存表間映射 - 使用數(shù)據(jù)訪問框架:LINQ 2 SQL/數(shù)據(jù)實體框架,JAVA 可持久化框架(JPA),ADO.NET 數(shù)據(jù)實體框架 - 練習:使用數(shù)據(jù)訪問框架操作數(shù)據(jù)庫 |
業(yè)務邏輯設計: ? - 業(yè)務邏輯設計工具:工作流 ? - 將業(yè)務邏輯包裝為服務 ? - 確定業(yè)務邏輯設計正確性:單元測試 ? - 練習:用工作流實現(xiàn)一段業(yè)務邏輯,并驗證實現(xiàn)的正確性 |
并行應用設計: - 識別并行任務:Map-Reduce模型 - 并行模式:生產-消費模式,并行,互斥和同步 - 并行實現(xiàn):多線程,線程池,并行庫 - 練習: 用工作流設計并行邏輯 |
界面邏輯設計 ? - MVC模式:模型控制視圖模式設計界面 ? - 界面邏輯:輸入驗證,修改模型,執(zhí)行邏輯,更新界面 ? - 實例分析:MFC的界面邏輯,JSF的界面邏輯,AJAX應用的界面邏輯,ASP.NE的界面 邏輯 ? - 練習:重構一段界面代碼,使其滿足MVC模式 |
基于測試和基于合約的設計:測試驅動設計和合約驅動的設計 - 測試驅動開發(fā)模型:紅綠紅模型 - 測試驅動設計:以通過測試用例為驅動力迭代增量完成架構 - 合約的概念:對實現(xiàn)方和調用方間各自的約束 - 基于合約的設計:前置條件,后置條件和不變式 - 練習:基于合約設計一個有理數(shù)類 |
設計可擴展的框架 ? - 設計擴展點:虛方法,委托(實踐),依賴項(參數(shù)依賴,成員依賴,類型依賴) - 可擴展框架:使用基于聲明和配置的動態(tài)注入依賴 ? - 實例分析:.NET的動態(tài)擴展框架,Java Spring框架 ? - 討論:必應詞典的可擴展性 |
安全性設計 - 對威脅建模 - 網絡安全,服務器安全和軟件系統(tǒng)安全 - 常見安全漏洞及防范:拒絕服務,SQL依賴注入,跨站點腳本調用,緩沖區(qū)溢出,數(shù)據(jù)泄密 - 討論:必應詞典針對安全性的設計 |
.NET和C++互操作設計 ? - 可選的技術評價:DLL包裝,COM和托管C++ ? - 互操作時的系統(tǒng)邊界設計 |
物理部署設計 - 部署單元:組件,數(shù)據(jù)庫組件,數(shù)據(jù)處理組件,通信組件,中間件 - 部署配置設計:定義配置項 - 驗證物理部署設計:使用虛擬機或TFS 實驗室 |