記錄一下今天所寫的內容,
今天弄到 八點多,先寄出一個概念出來,看這做法可不可行?
這樣的過程是很有意思的,下班時,與Nick討論相關的程式做法,
怎麼做比較好?以及 先前開會結束後,客戶 點的幾個點,都還蠻有意思的。
這樣的做法,到底好不好?看客戶那邊的反應了!
程式碼內容:
=================
一開始的方向,
我是打算,他傳 Model 的Key 進來後,我把它的資料,以Dictionary的方式回傳。
變成單一筆DataModel,我想把它轉為 Dictionary List 的方式回傳出去。
想說,好處是 可以由 Dictionary [key]來判斷它的資料欄位存不存在???
但,這在使用上,會較難用。
======================
針對 Cache 得DBModel ,藉由 Interface 來做規範,
我那時想到另一個做法,透過 Enum 來定義,那幾個Table 有存入Cache ,
ex:public enum CacheTable {
officer,
sa_insurance,
}
然後在用時,就仿 資料授權 一樣,
CacheTable.officer.GetCache(key) 之類的寫法。
但這樣的想法被推翻了。 這樣會複雜些 (????好像是這樣的理由???)
而Interface 來規範 那幾個DBModel 有加入Cache 。
==============================
另一個主題: 排序& Search 。
針對 List Search VS Dictionary Search 那個較快? (我上網還沒認真找資料)
我知道 List 的Where Search 是重頭開始查到尾。
而以為 Dictionary 也是 (只是它有key index 之類的)
但 Dictionary 並不是這樣
就被客戶 噹了一下
Dictionary 實際運作,也還沒有弄清楚,但以key index 找,應是比List Model 來的快。
所以,存入Cache 的方法,有了 「Dictionary( Key,DBModel)」的想法。
而中間 與Nick 、Wesley 也討論了 「Quick Sort」、「Binary Search」的方式。
(這是大四的演算法XDD~~當初真是不認真!)
而 Quick Sort 的方式,以下有一張「圖」介紹:
http://snipd.net/quicksort-in-c
原來上圖,那個紅棒一直在「相對右測」是使用 In-place 的方式。
(把基準點都先放置在最右測)
演算法介紹:
http://goo.gl/t9XSE
中文維基:http://goo.gl/yMNIO
但後來我們都想想,若是要「Search」,有必要先「Sort] 嗎???
因為 Sort 已不知把整個資料「掃描」過多少次了。
===========================
在來就是 Dictionary的部份,它的Key 可以是個object 嗎??
而此 object 是以 「匿名型別 Anonymous Type 」(new {col1=1,col2=2})時,是否可行??
就寫了簡單的測試:
=====================================
所以,這資料是可行的。
===============================
下一步計畫:
這部份也這樣靈光乍現,在回家的路上想了這些。
1. 這是User取得Cache 的方式,那若該筆不存在Cache 時,就要到DB把該筆取出,放至Cache
而這部份,可以用 一個Function 打發所有的DBModel 。
(原因:在DBModel上都有描述Table資料,且用底層Framework,可以直接用Model Select)
程式概想:
{
//回傳要存入Cache的方
}
今天弄到 八點多,先寄出一個概念出來,看這做法可不可行?
這樣的過程是很有意思的,下班時,與Nick討論相關的程式做法,
怎麼做比較好?以及 先前開會結束後,客戶 點的幾個點,都還蠻有意思的。
這樣的做法,到底好不好?看客戶那邊的反應了!
程式碼內容:
public interface ICacheModel : IModel { } public class MyDBModel : ICacheModel { public string TypeKey { get; set; } public string DataKey { get; set; } public string DataValue { get; set; } } public class MySample { public void Sample() { //到時AP人員的使用方式 MyDBModel result = CacheDataProvider.Get<MyDBModel>(new { TypeKey = "CC", DataKey = "DD" }); } } public static class CacheDataProvider { /// <summary>取得指定型別的Cache資料</summary> /// <typeparam name="TCachedModel">取得指定型別</typeparam> /// <param name="modelKeyData">該型別的Key物件</param> /// <returns>該筆型別資料</returns> public static TCachedModel Get<TCachedModel>(object modelKeyData) where TCachedModel : ICacheModel, new() { //資料源範例(from cache) Dictionary<object, object> datasource = new Dictionary<object, object>(); datasource.Add(new { TypeKey = "AA", DataKey = "AA" }, new TCachedModel()); datasource.Add(new { TypeKey = "BB", DataKey = "BB" }, new TCachedModel()); datasource.Add(new { TypeKey = "CC", DataKey = "CC" }, new TCachedModel()); datasource.Add(new { TypeKey = "DD", DataKey = "DD" }, new TCachedModel()); //取得資料 var result = datasource[modelKeyData]; return (TCachedModel)result; } }
=================
一開始的方向,
我是打算,他傳 Model 的Key 進來後,我把它的資料,以Dictionary
變成單一筆DataModel,我想把它轉為 Dictionary List 的方式回傳出去。
想說,好處是 可以由 Dictionary [key]來判斷它的資料欄位存不存在???
但,這在使用上,會較難用。
======================
針對 Cache 得DBModel ,藉由 Interface 來做規範,
我那時想到另一個做法,透過 Enum 來定義,那幾個Table 有存入Cache ,
ex:public enum CacheTable {
officer,
sa_insurance,
}
然後在用時,就仿 資料授權 一樣,
CacheTable.officer.GetCache(key) 之類的寫法。
但這樣的想法被推翻了。 這樣會複雜些 (????好像是這樣的理由???)
而Interface 來規範 那幾個DBModel 有加入Cache 。
==============================
另一個主題: 排序& Search 。
針對 List Search VS Dictionary Search 那個較快? (我上網還沒認真找資料)
我知道 List 的Where Search 是重頭開始查到尾。
而以為 Dictionary 也是 (只是它有key index 之類的)
但 Dictionary 並不是這樣
就被客戶 噹了一下
Dictionary 實際運作,也還沒有弄清楚,但以key index 找,應是比List Model 來的快。
所以,存入Cache 的方法,有了 「Dictionary( Key,DBModel)」的想法。
而中間 與Nick 、Wesley 也討論了 「Quick Sort」、「Binary Search」的方式。
(這是大四的演算法XDD~~當初真是不認真!)
而 Quick Sort 的方式,以下有一張「圖」介紹:
http://snipd.net/quicksort-in-c
原來上圖,那個紅棒一直在「相對右測」是使用 In-place 的方式。
(把基準點都先放置在最右測)
演算法介紹:
http://goo.gl/t9XSE
中文維基:http://goo.gl/yMNIO
但後來我們都想想,若是要「Search」,有必要先「Sort] 嗎???
因為 Sort 已不知把整個資料「掃描」過多少次了。
===========================
在來就是 Dictionary的部份,它的Key 可以是個object 嗎??
而此 object 是以 「匿名型別 Anonymous Type 」(new {col1=1,col2=2})時,是否可行??
就寫了簡單的測試:
Dictionary<object, object> datasource = new Dictionary<object, object>(); datasource.Add(new { id = 1, id2 = 2 }, new { Data1 = 1 }); datasource.Add(new { id = 3, id2 = 4 }, new { Data3 = 3 }); datasource.Add(new { id = 5, id2 = 6 }, new { Data5 = 6 }); datasource.Add(new { myid=1 }, new { Data7 = 7 }); dynamic result = datasource[new { myid = 1 }]; var aa = result.Data7;
=====================================
所以,這資料是可行的。
===============================
下一步計畫:
這部份也這樣靈光乍現,在回家的路上想了這些。
1. 這是User取得Cache 的方式,那若該筆不存在Cache 時,就要到DB把該筆取出,放至Cache
而這部份,可以用 一個Function 打發所有的DBModel 。
(原因:在DBModel上都有描述Table資料,且用底層Framework,可以直接用Model Select)
程式概想:
{
//回傳要存入Cache的方
}
public Dictionary <object,object> GetFromDB(object modelKeyData)