【正文】
tion Brokered Authentication Federated Authentication(SSO) Authorization Role Based Authorization Resource Based Authorization Claims Based Authorization Trusted subsystem Impersonation and Delegation Business Components Transaction Script Work Unit Command Application Faade Chain of Responsibility Business Entities Entity Translator Domain Model Table Module Caching Cache Dependency Coupling and Cohesion Adapter Dependency Injection Concurrency and Transactions Coarse Grained Lock Implicit Lock Optimistic Offline Lock Pessimistic Offline Lock Transaction Script Capture Transaction Details Exception Management Exception Shielding Logging and Instrumentation Provider Service Interface Service Interface Service Layer Faade Workflows Datadriven workflow Human workflow Sequential workflow Statedriven workflow 重要模式 l 程式門面 (Facade)– 提供統(tǒng)一的服務層。 l 責任鏈 (Chain of Responsibility)– 通過允許多個對象來處理請求以避免請求和發(fā)送者緊耦合。 l 命令 (Command)– 在通用的執(zhí)行接口里將請求處理封裝在不同的命令對象里。 l 依賴注入 (Dependency Injection)– 使用基類或接口來定義共享的抽象以及使用它來注入到實例 中以和共享的抽象接口交互。 l 域模型 (Domain Model)– 創(chuàng)建 Web 的互連對象,每一個對象都代表一些有意義的個體,它可能象一個公司那么大或者象一條線或一個命令窗體那么小。 l 實體轉(zhuǎn)換 (Entity Translator)– 實現(xiàn)一個對象以將消息數(shù)據(jù)類型轉(zhuǎn)換為業(yè)務需要的類型,將響應的業(yè)務數(shù)據(jù)類型轉(zhuǎn)換為輸入需要的類型。 l 門面 (Facade)– 對操作集合使用統(tǒng)一的接口以減少系統(tǒng)間的耦合。 l 服務接口 (Service Interface)– 系統(tǒng)使用編程接口來和其它系統(tǒng)交互。 l 服務層 (Service Layer)– 使用單獨的層來實現(xiàn)服務接口。 l 表模塊 (Table Module)– 創(chuàng)建一個組件在數(shù)據(jù)庫表或視圖中處理業(yè)務邏輯。 技術(shù)考慮 l 使用 Windows 工作流以簡化工作流開發(fā),自動支持安全,可依靠性,數(shù)據(jù)交互,廣泛的傳輸和編碼選擇以及提供內(nèi)置的持久性及行為追蹤。 l 如果要和非微軟系統(tǒng)交互,使用 BizTalk Server 2021 來執(zhí)行 EDI 操作。 l 只有當業(yè)務層被限制只能訪問 SharePoing 站點時使用 MOSS。 l 使用 Transaction Scope()來管理橫跨多個數(shù)據(jù)源的事務。 Additional Resources For more information on caching techniques,see Caching Architecture Guide Framework Applicationsat more information on data access techniques, Data Access Architecture Guideat more information on design patterns for business layers and ponents,see the following resources: Enterprise Solution Patterns Using Patternsat Orientation Patternsat Patternsat more information on exception management techniques,see Exception Management Architecture Guideat more information on performance in business layers and ponents,see the following resources: Design Guidelines for Application Performanceat and Design Review of Application for Performance and Scalabilityat more information on security issues in business layers and ponents,see the following resources: Designing ApplicationManaged Authorizationat Guidelines for Secure Web Applicationsat and Design Review for Securityat 應用層:在核心層以上,依賴于核心層; 表現(xiàn)層原則 概覽: 表現(xiàn)層的組件要實現(xiàn)和展示用戶接口,管理用戶交互。這一層包 括用戶輸入和顯示的控件,用戶交互的組件。下面的圖表顯示表示層如何融入一個通用的應用架構(gòu)。 表現(xiàn)層組件 l UI 組件。 UI 是用戶和應用程序交互的接口,負責呈現(xiàn)和格式化數(shù)據(jù),同時獲取和驗證用戶輸入數(shù)據(jù)。 l 用戶處理組件。用戶處理組件同步和協(xié)調(diào)用戶交互。當系統(tǒng)有復雜的用戶接口時,單獨的用戶處理組件可能會有用處,用分離的組件實現(xiàn)通用的用戶交互模式,可以使你在多用戶接口時重用它們。 方法 當設計表現(xiàn)層時,用下面的步驟幫助組織你的思維: 。根據(jù)你的需求,基礎(chǔ)結(jié)構(gòu)和部署限制來選擇客戶端類型。 定你怎樣去呈現(xiàn)數(shù)據(jù)。選擇數(shù)據(jù)格式并且決定 UI 的數(shù)據(jù)呈現(xiàn)方式。 。使用數(shù)據(jù)驗證技術(shù)過濾不安全的用戶輸入。 。減弱業(yè)務邏輯對表現(xiàn)層的依賴。 。如果你的系統(tǒng)有很多層,如數(shù)據(jù)訪問層及業(yè)務邏輯層,確定你的表現(xiàn)層與它們的策略。 設計時考慮的內(nèi)容: 當設計表現(xiàn)層時,使用下面的原則: l 選擇合適的 UI 呈現(xiàn)技術(shù)。確定你是要實現(xiàn) Rich(Smart)Client,還是 Web Client,Rich Inter Application(RIA)。 l 實現(xiàn)相關(guān)的模式。用已經(jīng)證明的模式去解決通用的表現(xiàn)層問題。 l 設計時專注于不同的方面。使用專門的呈現(xiàn) UI;使用專門的表現(xiàn)層實體獲取數(shù)據(jù),并將數(shù)據(jù)提交給視圖;使用專門的 UI 處理組件來響應用戶交互。 l 考慮用戶體驗。審查系統(tǒng)的用戶交互設計,根據(jù)不同的客戶端類型和開發(fā)技術(shù)來修改原有的用戶交互準則。 l 堅持用戶驅(qū)動設計原則。在設計表現(xiàn)層前,要了解客戶。要充分的調(diào)查,研究方案的可用性,跟客戶訪談來決定最好的表現(xiàn)層設計,以滿足客戶的需求。 表現(xiàn)層框架 類別 通常的問題 Caching 緩存了易變的數(shù)據(jù)。 緩存了沒有加密 的敏感數(shù)據(jù)。 選擇了不正確的緩存存儲方式。 在 WEB 開發(fā)時沒有使用適當?shù)木彺婕夹g(shù)。 假設數(shù)據(jù)在緩存里一直可用 但它有可能過期或被移除。 Composition 沒有考慮在運行時使用模式或類庫來實現(xiàn)動態(tài)布局和視圖注入。 使用依賴類和服務支持的表現(xiàn)層組件來代替支持運行時的依賴注入。 沒有在組件中使用發(fā)布 /訂閱方式來支持事件。 沒有使應用程序象單獨的模組一樣容易添加。 ExceptionManagement 沒有捕獲不可處理的異常。 當異常發(fā)生時沒有清空資源和狀態(tài)。 將敏感的信息展現(xiàn)給終端客戶。 使用異常來實現(xiàn) 程序邏輯。 捕獲你處理不了的異常。 在不需要的地方使用自定義異常。 Input 設計的時候憑直覺,或?qū)崿F(xiàn)了超級復雜的接口。 設計的不容易理解。 沒有考慮不同的屏幕大小和分辨率。 沒有考慮不同的設備或輸入類型,如移動設備,觸摸屏等。 Layout 為 Web 設置不適當?shù)牟季帧? 實現(xiàn)了過為復雜的布局。 沒有選擇合適的布局組件和技術(shù)。 沒有堅持可理解性和可用性的準則。 實現(xiàn)了不合適的工作流接口。 沒有支持本地化和全球化。 Navigation 不一致的導航。 重復的邏輯處理導航事件。 使用硬編碼導航。 對于向?qū)降膶Ш?,沒有管控狀態(tài)。 Presentation Entities 定義了不需要的實體。 在需要的時候沒有實現(xiàn)序列化。 RequestProcessing 在長時間的請求中鎖住了用戶接口。 混合了處理和呈現(xiàn)邏輯。 選擇了不合適的請求處理模式。 User Experience 顯示了無幫助的錯誤信息。 缺少響應。 過于復雜的用戶接口。 缺少用戶個性化。 缺少用戶權(quán)力。 設計了效率低的用戶接口。 UIComponents 在不需要的時候創(chuàng)建了用戶組件。 在 MVC 模式下沒有維護狀態(tài)。 選擇了不合適的 UI 組件。 UIProcessComponents 在不需要的時候?qū)崿F(xiàn)了 UI 處理組件。 實現(xiàn)了錯誤的設計模式。 在 UI 處理邏輯中混合了業(yè)務邏輯。 在 UI 處理邏輯中混合了呈現(xiàn)邏輯。 Validation 沒有驗證所有輸入。 只依靠客戶端的輸入驗證。你必須在服務器端或業(yè)務邏輯層驗證輸入。 沒有正確處理驗證錯誤。 沒有為驗證識別合適的業(yè)務規(guī)則。 沒有記載驗證失敗記錄。 緩存 緩存是提高應用程式性能和 UI 反應的最佳技術(shù),使用數(shù)據(jù)緩存可以優(yōu)化數(shù)據(jù)查詢和避免網(wǎng)絡擁塞。緩存開銷大的、重復處理的結(jié)果可以避免不 必要的重復處理。 當設計你的緩存策略時,考慮以下的指導原則: l 避免分布式的緩存一致。 l 不要緩存易變的數(shù)據(jù)。 l 不要緩存不加密的敏感數(shù)據(jù)。 l 當使用內(nèi)存中的緩存時,考慮緩存的數(shù)據(jù)隨時可以使用的格式。例如,緩存特定的對象替換緩存原始的數(shù)據(jù)庫數(shù)據(jù)。 l 區(qū)分緩存數(shù)據(jù)和狀態(tài)數(shù)據(jù)。 l 對于在特定時間改變的動態(tài)數(shù)據(jù)使用絕對過期策略。 l 對于特定時期不活動的信息使用變動的過期。 l 當準備使用基于時間的過濾策略時,要考慮:選擇一個小的時間值時需要更多的網(wǎng)絡帶寬,若選擇一個高的值時,你也許會得到陳舊的數(shù)據(jù)。 l 當使用內(nèi)存緩存時考慮使用自動移除。 l 當使用硬盤緩存時考慮使用手動移除。 l 不要依賴于緩存中的數(shù)據(jù),它也許已經(jīng)被移除。 l 如果你使用持久緩存,請考慮主動加載。如果你知道數(shù)據(jù)是靜態(tài)的,或生命周期是可知的或者你的網(wǎng)絡不可靠,連接很慢你應該使用主動加載。 l 如果你使用內(nèi)存中的緩存,除非緩存項創(chuàng)建比較昂貴否則避免主動加載。 組合 考慮當表現(xiàn)層如果使用運行時組合的獨立的模塊,你的程序是否很容易開發(fā)或者維護。組合模式提倡動態(tài)加載表現(xiàn)層組件,在運行時創(chuàng)建視圖。這些模式可以幫助你減少代碼和依賴類庫,當依賴的組件改變時不需 要重新編譯和部署。組合模式幫助你實現(xiàn)共享,重用和替換表現(xiàn)層邏輯和視圖。 當使用組合策略時,考慮以下的原則: l 使用動態(tài)加載和重復使用視圖以簡化設計,提高性能和可維護性。 l 利用模式來消除依賴,如依賴注入,支持動態(tài)加載和便捷的模塊替換。 l 如果你需要支持菜單和命令按鈕,考慮使用 Command 模式。 l 當組合你的 UI 時考慮使用視圖注入模式來替代視圖查找模式。 l 組合動態(tài)的 WEB 頁面時,考慮使用模式視圖模式來提高重用和一致性。對于 ,你可以使用 Master Page. l 如果你用動態(tài)的模塊組件來創(chuàng)建視 圖,那可以考慮使用組合模式。 異常管理 使用統(tǒng)一的異常管理機制為你的應用程式設計一致的捕獲異常方式。對于跨越邊界的異常要特別注意,即使跨越可信任的邊界。設計時要考慮未處理的異常,使它們不會破壞程式穩(wěn)定性或暴露敏感信息。 當設計異常處理時,考慮以下的原則: l 使用對用戶友好的錯誤提示信息。 l 避免在錯誤頁,報錯信息,日志,審核文件中暴露敏感數(shù)據(jù)。 l 對于不能處理的異常使用全局統(tǒng)一的異常處理方式,一個錯誤頁或者錯誤提示信息。 l 區(qū)別