2012年10月18日 星期四

IHttpHandlerFactory 玩弄紀錄

泛型處理常式犯行處理常識

第一次見到他就覺得名字很討喜

當時只是為了把資料庫2進位資料轉成圖片而用到它

又過了一段時光學會了用他來搞AJAX

從此我就偏好使用HttpHandler來處理非同步

IHttpHandlerFactory是他老媽,我跟她就沒那麼熟平常沒事就搞她,今天換搞她老媽



估狗了一番,老樣子有看沒有懂,照慣例瞎搞吧



之前 $.ajax() 的時候,都直接 url: 'xxx.ashx' 去呼叫 HttpHandler,好處是 Web.config 不用指定路徑

但是總隱約覺得這樣不是很好,雖然說出上來為什麼

如果每個 HttpHandler 都搬到類別庫,再指定路徑的話,有很多 HttpHandler 的時候 Web.config 就暴肥

如果我可以只指定一次路徑,但是之後可以呼叫不同的 HttpHandler 那該有多好,或許我只是在做夢吧 - <head first 名言>



Web.config 指定(虛擬)路徑給 HttpHandlerFactory

HttpHandlerFactory 跟 HttpHandler 都放在類別庫中

隨便拉4個按鈕來觸發AJAX,這時 url 呼叫虛擬路徑,就會觸發類別庫的 HandlerFactory.GetHandler()

GetHandler() 提供的參數足夠來判斷呼叫的來源,判斷邏輯就自由發揮吧

反射吧!男孩 這裡再複習一下利用反射直接由類別名稱來產生該類別的實體,以避免寫大量的switch case



效果不值一提 就是按鈕 1 - 4 按了 alert 1 - 4

真正的價值大概是有辦法做到關注點分離,讓原本義大利麵式的 web 專案把頁面跟類別分開來

2012年10月13日 星期六

Lazy 延遲初始化

無意間看到的 .NET 4.0 的功能

介紹文:http://www.cnblogs.com/forgetu/archive/2011/05/07/dotnet-lazy-initialization.html

簡單來說就是延遲物件的初始化,直到第一次使用物件的方法或賦值給屬性時,才進行初始化

2012年10月6日 星期六

利用 泛型委派 Action 與 Func 減少不必要的 公用方法

基礎知識 請拜 小朱大神人文 [.NET] 由委派演進到 Lambda Expression
http://www.dotblogs.com.tw/regionbbs/archive/2012/08/15/from.delegate.to.lambda.aspx

假如剋戶要的效果像這樣 - 一個偵測句子有無特定關鍵字的文字小遊戲 (雖然真實的剋戶要求絕無可能這麼簡單)

新到不能再新的初心者寫出這段吐槽到不行的CODE

身為一個職業的嫻熟PG,絕不允許重複代碼,於是大刀砍~

抽抽抽~重複的地方全抽出來寫個公用方法,一片蛋糕

但是有時候並不是很好(雖然自我感覺良好),因為如果程式碼重複的代碼僅限於一個方法之中

如果抽成公用方法方法的話,這將是永遠只有同一叫用來源的方法

這不打緊,如果方法的順序排的很亂,移至定義跳來跳去還沒看CODE就先轉暈了

這還不包括封裝的方式不夠好,不小心被誤用,由其他的來源叫用這個公用方法



訴求很簡單:有沒有辦法(限制)在一個方法之中,把重複的代碼包起來執行

答案很簡單,使用委派就好了

但是直接使用自訂的委派物件不是個好作法,如上所言

不會在別的地方用到,所以特地宣告一個委派物件有點多餘,甚至有可能占用掉一個別人可能需要的命名



我想得到的 .NET 不太可能沒想到

神人文:http://www.dotblogs.com.tw/atowngit/archive/2011/02/23/21523.aspx

參拜完神人文章之後就知道有現成的委派物件可以直接使用。



利用Func我將3個小方法封裝在 doWork 之中,絕無可能被其他方法誤用

而且泛型委派可以直接取得同層的變數

這個案例其實適合使用Func,但是懶得再寫一個Action的案例所以直接硬改

因此 lineMaker 為了判斷來源 多了一個 switch

實際上要用 Action 還是 Func 應該遵照需不需要有回傳值來做決定