2014年2月18日 星期二

Null 值

參考文章參考文章-2
資料庫裡面如果有Null會發生什麼事呢?我的物件、參數指向Null又是如何?
Null只能用IsNull之類的方法檢測,並傳回Bool,
這意味者其他的運算子都不能用了,
Null和空字串又不一樣,空字串至少還是"有值"的,可以進行比對,
所以除非特別需要,不然把資料庫裡面的Null都替代掉吧!

重構-改善既有的程式碼 & 向範式前進

重構-改善既有的程式碼(Refactoring: Improving The Design of Existing Code)
作者:Martin Fowler, Kent Beck, John Brant, William Opdyke, don Roberts
譯者:侯捷/熊節
出版社:碁峰資訊
ISBN:9861547533



重構-向範式前進 (Refactoring to Patterns)
作者:Joshua Kerievsky
譯者:侯捷/陳裕城
出版社:碁峰資訊
ISBN:9861814027


這兩本重構作者不一樣,第一本藍色是講比較基礎的,但是都相當實用,
其實在看這兩本之前,我根本不知道什麼是重構,
但是就有自己的一套方法、風格編排程式碼,
看了之後,發現作者和我的想法很接近,
不論是程式的可讀性,想表達清晰邏輯的意圖,
第一本用很短的時間,大約兩天就看完了,其實沒學到什麼,
因為那已經是我的本能了,裡面超過一半的重構手法我都已經用過。

第二本的難度就比較高了,所謂的範式就是GOF的設計模式,
我也是大概翻過而已,主要是看原本沒有,到有設計模式的演化,
裡面程式碼都算有點難度的,要細讀會花很多時間。

這兩本共同點就是"從無到有"的概念,
大型的軟體,一開始就要導入設計模式,如果沒有,程式碼將是一團糟;
中小型的軟體,可以先導入簡單的抽象,若是一開始就大量使用設計模式,
只會有兩個結果,一個是很有用,另一個是很沒用,
若是未來的變化先被猜到了,擴展將是相當容易,
若是沒猜中,要擴展比沒有設計更難,需要大規模的重新撰寫。

一開始不導入,以重構來實現設計模式,是最具有彈性,且最適用於現況改變的方式,
依照不同情況導入不同模式,這個想法相當有前衛性,I Like!

2014年2月17日 星期一

DateTime 結構

參考文章
參考文章-2

這蠻厲害的,各種格式都有,我也來備份一個,很多時候都會用到日期,
值得注意的是月份的 M 是大寫
DateTime dt = DateTime.Now;
string[] strDT = new string[17];
strDT[1] = dt.ToString();//2009/5/25 下午 05:35:21 
strDT[2] = dt.ToFileTime().ToString();//127756416859912816 
strDT[3] = dt.ToFileTimeUtc().ToString();//127756704859912816 
strDT[4] = dt.ToLocalTime().ToString();//2009/5/25 下午 05:35:21 
strDT[5] = dt.ToLongDateString().ToString();//2009年2月28日 
 strDT[6] = dt.ToLongTimeString().ToString();//下午 05:35:21 
strDT[7] = dt.ToOADate().ToString();//39882.6654489321 
strDT[8] = dt.ToShortDateString().ToString();//2009/5/25 
strDT[9] = dt.ToShortTimeString().ToString();//下午 05:35
strDT[10] = dt.ToUniversalTime().ToString();//2009/5/25 上午 09:35:21 
 
strDT[1] = dt.Year.ToString();//2009 
strDT[2] = dt.Date.ToString();//2009/5/26 上午 12:00:00
strDT[3] = dt.DayOfWeek.ToString();//Saturday 
strDT[4] = dt.DayOfYear.ToString();//146 
strDT[5] = dt.Hour.ToString();//13 
strDT[6] = dt.Millisecond.ToString();//441 
strDT[7] = dt.Minute.ToString();//30 
strDT[8] = dt.Month.ToString();//2 
strDT[9] = dt.Second.ToString();//28 
strDT[10] = dt.Ticks.ToString();//632667942284412864 
strDT[11] = dt.TimeOfDay.ToString();//16:25:334412864 
strDT[1] = dt.ToString();//2009/5/26 上午 12:28:21 
strDT[2] = dt.AddYears(1).ToString();//2010/5/26 上午 12:28:21 
strDT[3] = dt.AddDays(1.1).ToString();//2009/5/27 上午 12:28:21 
strDT[4] = dt.AddHours(1.1).ToString();//2009/5/26 上午 01:28:21 
strDT[5] = dt.AddMilliseconds(1.1).ToString();//2009/5/26 上午 12:29:21  
strDT[6] = dt.AddMonths(1).ToString();//2009/6/26 上午 12:28:21 
strDT[7] = dt.AddSeconds(1.1).ToString();//2009/5/26 上午 12:28:22 
strDT[8] = dt.AddMinutes(1.1).ToString();//2009/5/26 上午 12:29:21  
strDT[9] = dt.AddTicks(1000).ToString();//2009/5/26 上午 12:28:21 
strDT[10] = dt.CompareTo(dt).ToString();//0 
//strDT[11] = dt.Add(?).ToString(); //? = TimeSpan Value
strDT[1] = dt.Equals("2009-2-28 16:11:04").ToString();//False 
strDT[2] = dt.Equals(dt).ToString();//True 
strDT[3] = dt.GetHashCode().ToString();//1535674321 
strDT[4] = dt.GetType().ToString();//System.DateTime 
strDT[5] = dt.GetTypeCode().ToString();//DateTime 
    
strDT[1] = dt.GetDateTimeFormats('s')[0].ToString();//2009-05-26T00:28:21
strDT[2] = dt.GetDateTimeFormats('t')[0].ToString();//上午 12:28
strDT[3] = dt.GetDateTimeFormats('y')[0].ToString();//2009年5月
 strDT[4] = dt.GetDateTimeFormats('D')[0].ToString();//2009年5月26日
 strDT[5] = dt.GetDateTimeFormats('D')[1].ToString();//2009年05月26日 

 IFormatProvider culture = new System.Globalization.CultureInfo("zh-CN", true);
strDT[6] = dt.GetDateTimeFormats('D', culture)[2].ToString();//星期二, 2009-05-26
strDT[7] = dt.GetDateTimeFormats('D', culture)[3].ToString();//星期二, 2009年5月26日

 strDT[8] = dt.GetDateTimeFormats('M')[0].ToString();//5月26日
 strDT[9] = dt.GetDateTimeFormats('f')[0].ToString();//2009年5月26日 上午 12:42 
strDT[10] = dt.GetDateTimeFormats('g')[0].ToString();//2009/5/26 上午 12:42
strDT[11] = dt.GetDateTimeFormats('r')[0].ToString();//Tue, 26 May 2009 00:42:05 GMT

strDT[1] = string.Format("{0:d}", dt);//2009/5/26 
strDT[2] = string.Format("{0:D}", dt);//2009年5月26日 
 strDT[3] = string.Format("{0:f}", dt);//2009年5月26日 上午 12:42
strDT[4] = string.Format("{0:F}", dt);//2009年5月26日 上午 12:42:05
strDT[5] = string.Format("{0:g}", dt);//2009/5/26 上午 12:42 
strDT[6] = string.Format("{0:G}", dt);//2009/5/26 上午 12:42:05
strDT[7] = string.Format("{0:M}", dt);//5月26日 
 strDT[8] = string.Format("{0:R}", dt);//Tue, 26 May 2009 00:42:05 GMT
strDT[9] = string.Format("{0:s}", dt);//2009-05-26T00:42:05
strDT[10] = string.Format("{0:t}", dt);//上午 12:42
strDT[11] = string.Format("{0:T}", dt);//上午 12:42:05
strDT[12] = string.Format("{0:u}", dt);//2009-05-26 00:42:05Z 
strDT[13] = string.Format("{0:U}", dt);//2009年5月25日 下午 04:42:05
strDT[14] = string.Format("{0:Y}", dt);//2009年5月
 strDT[15] = string.Format("{0}", dt);//2009/5/26 上午 12:42:05 
strDT[16] = string.Format("{0:yyyyMMddHHmmssffff}", dt); //200905260042057892

Using、Dispose、Close、Connection Pooling...之間的恩怨情仇

參考文章-1
參考文章-2
參考文章-3
參考文章-4

做資料庫專題時,Connection物件實在讓我頭大,到底要用哪個方式結束資料庫連線呢?

首先來看:

Close
關閉了連線,連線字串還在屬性裡,連線資訊被丟進Connection Pooling,
若此物件不為區域變數的話不會被GC回收。

Dispose、Using
其實是做一樣的事情,語法稍有不同而已,
執行了Close,並將連線字串清除,連線資訊被丟進Connection Pooling,
但物件本體也不指向Null,所以...可能會被回收吧?

Null
如果把物件明確地指向Null,下次垃圾車來的時候一定會被回收。

嗯...所以說如果頻繁使用的話,Close可能會是比較好的選擇,
Dispose、Using,會不斷的創建、銷毀物件,
若是很急切的想釋放記憶體,那就指向Null吧!

2014年2月10日 星期一

通訊錄管理

開發環境:
.NET Framework 4.5.1
Visual Studio 2013
Access 2010
C#

下載位置:點選後按右下角下載 http://goo.gl/SFNlKj


2014年2月7日 星期五

2014年2月5日 星期三

度量衡換算工具

開發環境:
.NET Framework 4.5.1
Visual Studio 2013
Access 2010
C#

下載位置:點選後按右下角下載 http://goo.gl/SFNlKj


2014年2月4日 星期二

Software Ideas Modeler 類別圖、流程圖繪製軟體

左邊圖案拉一拉就可以畫出來了,完整度還蠻高的,
也可以輸出成各種通用格式,實用的軟體!
官網連結

2014年2月3日 星期一

SQL LIKE語句,萬用字元的處置

原文在此
避開中括弧   _  %  等萬用字元,用Replace()置換
            inquireStr = inquireStr.Replace("[", "[[]");
            inquireStr = inquireStr.Replace("_", "[_]");
            inquireStr = inquireStr.Replace("%", "[%]");

天眼跟蹤 Cold Eyes


好緊張刺激,讓人想從頭看到尾,果然還是警察片最好看!
女主角臉色蒼白病懨懨的樣子也太正,壞人也太帥,隊長痞痞的也好酷!

戰爭遊戲 Ender's Game


剛開始看的時候覺得蠻唬人的,全地球的命運交給小孩,應該只是特效好看而已吧!
沒想到最後面15分鐘才是最好看的,如果主角事先知道了,就不會採用那樣的戰術,結果可能完全不同!