在幾年前,我寫過一篇 Dynamic Proxies in C#,內容是透過Interface、Proxy的方式置換虛擬函式,這是許多Mock Library用的手法,事實上除了這個手段外,還有另一個可以達到類似效果的技巧,那就是透過JIT 引擎,用更粗暴的方式來置換IL Code,跟Dynamic Proxies手法不同的是這個方式是針對函式本身,可以影響到靜態與非虛擬函式。
與JIT 跳隻舞
- 907
- 0
- .NET Framework
- 2019-06-20
在幾年前,我寫過一篇 Dynamic Proxies in C#,內容是透過Interface、Proxy的方式置換虛擬函式,這是許多Mock Library用的手法,事實上除了這個手段外,還有另一個可以達到類似效果的技巧,那就是透過JIT 引擎,用更粗暴的方式來置換IL Code,跟Dynamic Proxies手法不同的是這個方式是針對函式本身,可以影響到靜態與非虛擬函式。
多數的O/R Mapping Framework都有個共同的行為模式,在刪除資料或是修改資料前,必須隱式的下達一個Query,由資料庫取得即將要更新的資料列,然後轉成物件後再更新。 這個行為模式,多半也會成為設計師考慮是否使用O/R Mapping Framework的考量之一,因為多一個Query,就代表著效能會因此降低,雖然對於O/R Mapping Framework而言,這是一個必要的行為模式,因為它們得考量到當物件有著關聯時的情況。但對於實際的專案來說,跳過這個Query來更新資料,卻也是必然會出現的情況,既然是必然會出現的情況,多數的O/R Mapping Framework也只好為此做出讓步,提供可跳過Query來更新資料的機制,Entity Framework自然也擁有這個機制。
當一個地雷踩第二次的時候,就是以文字記錄下來的時候。
一般來說,Windows Store Application對於Windows 8來說,是一個特別的應用程式,他執行在特殊的Container(容器)中,雖然有著與舊有執行檔相同的附檔名(.exe),但事實上
Windows Program Loader是無法直接載入執行的,必須先建立容器,然後要求該容器來執行。
摘要:Windwos Azure Developer Day - Windows Azure Mobile Serviced and app development 投影片
Proxy Pattern是Design Patterns中常用的一種設計模式,目的大致是隔離使用端及目標物件,降低使用端及目標物件的相依性,進而提升應用程式的可變性,也就是延展性。常見的Proxy應用大致如下圖。
delegate是C#的關鍵保留字,用來宣告可裝載函式的型別
Closure這種寫法,在程式語言領域存在已經有一段很長的時間了,其原意很簡單,就程式語言角度來看,Closure意指將一個function(函式)放到一個變數中,
也就是C++常用的function pointer(函式指標)的意思
隨著Windows Azure Platform的發展,其支援的平台及語言也越來越多,行動裝置自然也是重點之一,從去年開始,Windows Azure Toolkit for Windows Phone率先推出,
緊接著for iOS與Android版本也釋出了。10個月後的今天,這些Windows Azure Toolkits隨著Windows Azure Platform的發展逐步演進
LINQ(VB.NET)投影片
在前些日子的Microsoft Developer Day 2012中,我主講一場『可攜性函式庫在Windows 8及Windows Phone 7開發實戰』,內容主要是談如何透過Portable Library開發類別庫,
使其能在不重新編譯情況下共用於Window Phone 7及Metro Style環境。
OK,一個全新的東西有何歷史可言?事實上,Windows Metadata本身並非是一個全新的東西,她最早的雛形
出現在.NET Framework 3.5 SP1,當初是為了Client Profile的目的而發明。
從2000年C#誕生以來,至今已經過了11年多了,C#的版本號也來到了4.0,在筆者所接觸的語言中,C#算是一個相當具有活力的程式語言,設計者Anders Hejlsberg的大膽且創新的特質充分的反映在這個語言上,
其每次的改版都會出現許多大膽的嘗試,目的是為了讓程式設計師能更快速、簡潔的運用C#來完成一些過去看來很複雜的動作,當然!所謂的大膽及創新的嘗試,通常也會引起正反兩面的意見。
本文列出一些C#中可以減少程式設計師撰寫程式碼數量的特色(語法、指令),其中有些是大家已經耳熟能詳的
Framework最迷人的一點就是,設計時即考量到了延展性的議題,所以一個良好的Framework,必然擁有可擴充的設計存在,本文的Flow Engine雖然簡單,但也具備了這個特色。
Flow Engine,也就是我們常聽到的【流程引擎】,主要用途用於以特定順序執行一系列的工作,就概念上而言,Flow Engine非常簡單,只是依據特定順序來執行一系列工作而已
在ASP.NET 4.0中,有一個很有趣的特色:Pre Application Start Method,原本在ASP.NET中,當應用程式起始時首先被呼叫的是Global.asax中的Application_Start函式,新增的Pre Application Start Method機制
則稍微改變了這個流程,當某個Assembly標示了PreApplicationStar Method Attribute後,ASP.NET會在應用程式起始時呼叫指定的函式,這個動作發生在Global.asax中的Application_Start之前
在Windows Phone 7.1(Mango)中,將原本存在於7.0中的Photo Extension功能結合新的Searching Extension統稱為App Connect,透過App Connect,應用程式可整合至Windows Phone的Search及Photo功能內,以Photo來說,當使用者檢視圖片時可透過我們的應用程式進行圖片檢視或是上傳,在Search時,也可以透過我們應用程式對搜尋結果做進一步的動作、
雖然新的Executing Model加入Dormant讓Windows Phone應用程式進入類多工的模式,但其仍然不是真的完全多工,因為在我們固有印象中的多工,應該是應用程式於背景持續執行,也就是類似常駐程式一樣的效果。
而Dormant模式則是將應用程式暫止,此時該應用程式是被完全暫停,這與舊有印象中的常駐程式相距甚遠。
因此,Windows Phone 7.1加入了Background Agents機制,其細分為兩類,一個是Scheduled Notifications,用來撰寫Reminder(提醒)及Alarm(鬧鐘)類的應用程式,另一個是Scheduled Tasks,用來撰寫需要定時呼叫
的常駐程式,例如收集GPS資料或是於特定時間週期更新網路資料。
切出Data Layout,通常是一個資料庫應用程式最初、也是最重要的部分,或許有些初學者對此感到困惑,是的!你可以用SqlDataSource做出客戶資料的編修畫面,
但一旦牽扯到商業邏輯,SqlDataSource絕對不會是選項,硬要使用的話會成為負擔。
想像一下,當設計訂單編修畫面時,你可以使用SqlDataSource來呈現訂單表頭及表身的編輯動作,但儲存前後庫存的控管就一定得回到ADO.NET處理,這時商業
邏輯便會呈現出與UI混雜的窘境,整個應用程式也會變得難以維護。
前一篇中,我們設計了GridViewHandler及FormViewHandler,讓商業邏輯可以由主程式中抽離,放置於外部來動態選擇要載入那些商業邏輯,就該例而言,這個設計除了將原本該
置於Data Layout的商業邏輯與UI扯上關聯外,其實並無其它設計較為不當之處,而將商業邏輯與UI扯上關聯這點,其實也是為了讓範例更加簡單易懂而特意設計的,要將這種設計
移置Data Layout裡也很簡單。