這期內(nèi)容當中小編將會給大家?guī)碛嘘P如何理解.NET面向上下文架構模式,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站專注于蒲縣企業(yè)網(wǎng)站建設,響應式網(wǎng)站,電子商務商城網(wǎng)站建設。蒲縣網(wǎng)站建設公司,為蒲縣等地區(qū)提供建站服務。全流程按需網(wǎng)站建設,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務
1. 上下文概述
上下文:其實就是一個邏輯上的業(yè)務、功能區(qū)域。在這個邏輯區(qū)域里可以有效的進行管理,算是一種制度的約束,也可以理解為某種范圍類的數(shù)據(jù)共享。
其實在很多應用框架中到處可以看見上下文的概念,包括.NET本身的設計就建立在這種思想上的。實例化的對象默認存在于系統(tǒng)中的默認上下文中,我們可以構建自己的上下文將對象在運行時進行合理的管理。
在ASP.NET框架中比較經(jīng)典的就是HttpContext上下文對象。所有的運行時對象都會邏輯歸屬到HttpContext上下文中來,如:我們可以使用Request、Response等對象訪問HTTP處理的生命周期數(shù)據(jù)。
在Remoting中跨AppDomin訪問也是建立在上下文基礎上的,請求的消息通過隧道后序列化到達調(diào)用發(fā)。王清培版權所有,轉(zhuǎn)載請給出署名
在這些強大的應用框架背后總有著讓人難以琢磨的設計秘方,諸多的設計原則、設計模式、豐富的實踐經(jīng)驗都將是框架穩(wěn)定運行的基石。Context算是一個比較完美的邏輯范圍設計模式。[王清培版權所有,轉(zhuǎn)載請給出署名]
那么就讓我們來領略一下上下文的奧秘吧!
2. 上下文的一般應用
上下文的設計思想絕對的美妙,很多地方一旦進行上下文抽象就能解決很多問題。比如在Remoting中我們可以動態(tài)的在上下文中加入很多擴展對上下文中的所有對象進行強制管理,比如:調(diào)用某一個方法我們需要進行安全檢查,我們可以編寫一個滿足自己當前項目需求的安全認證插件動態(tài)的注入到上下文管理器區(qū)域中,在這個地方就體現(xiàn)出上下文的設計優(yōu)勢。
在Web編程中,由于它有著與Winfrom編程很大的差異性,需要將同一組對象同時服務于N個客戶端進行使用,而在Winfrom中基本上都是屬于單線程的,當然可以手動的開啟多線程并行操作。對于ASP.NET每當有新的請求處理時,框架會自動開啟新的線程去處理當前的調(diào)用,然后這個時候就是需要一個相對于之前操作的獨立上下文數(shù)據(jù)環(huán)境,而不是在同一個 上述代碼是我模擬一個上下文的執(zhí)行過程。 3. 上下文共享區(qū)域 在每個獨立的上下文環(huán)境中應該有一片共享的數(shù)據(jù)存儲區(qū)域,以備多個上下文對象訪問。這種方便性多半存在于項目比較緊張的修改需求的時候或者加新業(yè)務的時候擴展方法用的。BLL調(diào)用代碼: DAL執(zhí)行代碼: 4. 上下文運行時環(huán)境 對于上下文運行時環(huán)境的構建需要考慮到運行時是共享的上下文對象。對于納入上下文管理的所有對象都需要共享或者說是受控于上下文運行時。 上下文構建: 對于上下文的入口構建: 通過Using的方式我們開始上下文生命周期。 5. 上下文活動對象 上下文對象的綁定需要延后,不能在對象的構建時就創(chuàng)建上下文。 使用后期綁定動態(tài)的切入到執(zhí)行的上下文中。 調(diào)用代碼,上下文入口: 6. 上下文在分層架構中的運用 有了上下文的核心原型之后我們可以擴展到分層架構中來,對于分層架構的使用其實很有必要,一般的大型業(yè)務系統(tǒng)都是混合的使用模式,可能有C/S、B/S、Mobile終端等等。 對于加入Service層之后BLL、DAL將位于服務之后,對于來自客戶端的調(diào)用需要經(jīng)過一些列的身份驗證及權限授予。有了WCF之后面向SOA的架構開發(fā)變的相對容易點,對安全、性能、負載等等都很完美,所以大部分的情況下我們很少需要控制BLL、DAL的執(zhí)行運行。 那么沒有使用WCF構建分布式的系統(tǒng)時或者是沒有分布式的需求就是直接的調(diào)用,如WEB的一般開發(fā),從UI到BLL到DAL?;蛘呤瞧胀ǖ腤infrom的項目、控制臺項目屬于內(nèi)網(wǎng)的使用,可能就需要控制到代碼的執(zhí)行。 下面我通過演示一個具體的實例來看看到底效果如何。 我以控制臺的程序作為演示項目類型,也使用簡單的三層架構。 這個再簡單不過了吧,為了演示越簡單越好,關鍵是突出重點。 需求: 在DAL對象里面加入一個插入Order實體對象的方法: 在這個類的上面有一個特性ContextEveningBound,該是用來表示當前對象屬于后期綁定到上下文的對象。同時該類也繼承自一個ContextModuleBaseObject 在方法InsertOrderSingle上面有兩個特性,ContextLogHandler是用來記錄方法的執(zhí)行日志,ContextSecurityHanlder是用來在方法執(zhí)行的過程中強制要求管理員認證。 BLL對象代碼: 在BLL對象里面有一個調(diào)用DAL對象方法的實例對象,為了演示簡單這里沒有加入層的依賴注入設計方案,通過直接調(diào)用方式。在BLL方法體中有一個專門用來在上下文中調(diào)用方法的接口,這是約束目的是為了能讓框架切入到方法的執(zhí)行之前先執(zhí)行。具體的設計原理我將在下一篇文章中詳細講解。 在方法的上面有一個ContextExceptionHandler特性,目的是安全的調(diào)用DAL對象的方法,在有異常的情況下能通過上下文的方式人性化的提示錯誤信息。這樣我們就不需要頻繁的編寫捕獲異常的代碼,看起來也不爽,我們要的是代碼的整潔、美麗。 UI調(diào)用: 執(zhí)行效果: 會先執(zhí)行日志的記錄,然后要求我們輸入用戶憑證才能繼續(xù)執(zhí)行下面的方法。 我輸入YES才能繼續(xù)執(zhí)行插入的方法。我們可以通過很簡單的實現(xiàn)上下文的管理接口,對方法進行控制。 總結:該篇文章只是介紹上下文的作用、原理、優(yōu)勢。 上述就是小編為大家分享的如何理解.NET面向上下文架構模式了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。View Code [ContextModule.ContextExceptionHandler(OperationSort = 1)] public void UpdateOrderSingle() { Model.Model_Order ordermodel = new Model.Model_Order() { OrderGuid = Guid.NewGuid(), OrderTime = DateTime.Now }; //放入上下文共享對象池 ContextModule.ContextRuntime.CurrentContextRuntime.SetValue("updateorder", ordermodel); ContextModule.ContextAction.PostMethod
[ContextModule.ContextLogHandler(OperationSort = 1)] public void UpdateOrderSingle() { Model.Model_Order ordermodel = ContextModule.ContextRuntime.CurrentContextRuntime.GetValue("updateorder") as Model.Model_Order; }
View Code /*** * author:深度訓練 * blog:http://wangqingpei557.blog.51cto.com/ * **/ using System; using System.Collections.Generic; using System.Text; namespace ContextModule { ///
using (ContextModule.ContextRuntime.BeginContextRuntime()) { }
View Code /*** * author:深度訓練 * blog:http://wangqingpei557.blog.51cto.com/ * **/ using System; using System.Collections.Generic; using System.Text; using System.Data; using ConsoleApplication1.BLL; using ConsoleApplication1.Model; namespace ConsoleApplication1 { public class Program { public static void Main(string[] args) { BLL.BLL_Order order = new BLL.BLL_Order(); using (ContextModule.ContextRuntime.BeginContextRuntime()) { Model.Model_Order ordermodel = new Model_Order() { OrderGuid = Guid.NewGuid(), OrderTime = DateTime.Now }; Model.Model_Order resultmodel = ContextModule.ContextAction.PostMethod
View Code /*** * author:深度訓練 * blog:http://wangqingpei557.blog.51cto.com/ * **/ using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1.DAL { [ContextModule.ContextEveningBound(IsEvening = true)] public class DAL_Order : ContextModule.ContextModuleBaseObject
View Code /*** * author:深度訓練 * blog:http://wangqingpei557.blog.51cto.com/ * **/ using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace ConsoleApplication1.BLL { [ContextModule.ContextEveningBound(IsEvening = true)] public class BLL_Order : ContextModule.ContextModuleBaseObject
View Code /*** * author:深度訓練 * blog:http://wangqingpei557.blog.51cto.com/ * **/ using System; using System.Collections.Generic; using System.Text; using System.Data; using ConsoleApplication1.BLL; using ConsoleApplication1.Model; namespace ConsoleApplication1 { public class Program { public static void Main(string[] args) { BLL.BLL_Order order = new BLL.BLL_Order(); //開啟上下文 using (ContextModule.ContextRuntime.BeginContextRuntime()) { Model.Model_Order ordermodel = new Model_Order() { OrderGuid = Guid.NewGuid(), OrderTime = DateTime.Now }; Model.Model_Order resultmodel = ContextModule.ContextAction.PostMethod
分享文章:如何理解.NET面向上下文架構模式
標題URL:http://weahome.cn/article/gdooso.html