需求:
在之前的CYQ.Data版本中,如果你要更新某一個字段的值+1;
解決方案:
1:如果用MAction操作,可能會如下代碼:
using(MAction action=new MAction(表名))
{
if(action.Fill(id))
{
action.Set(字段名,action.Get<int>(字段名)+1);
action.Update();
}
}
簡單的說,就是需要查詢出值,然后再用原值進行相關的操作,用這種代碼代價就是要多查一次。
2:另一種方式高性能的是使用MProc來直接操作Sql語句,可能會如下代碼:
using(MProc proc=new Proc("Update 表名 set 字段名=字段名+1"))
{
proc.ExeNonQuery();
}
用MProc基本是萬能的了,直接處理SQL語句和存儲過程。。。
大伙習慣了MAction多,所以希望MAction也有個順路功能:
不過好多人習慣用MAction,都圖個方便,連條SQL語句也想省一下。。。
事實上,我本人在多個項目中,也有這種需求,當然最后都是直接使用MProc處理了。
很多時候,我一直在尋找一種最優方式,能處理這種值+1,值-1的問題,不過每每看着架構,不好下手,一直沒找到切入點和使用方法。
比如一開始想的:
using(MAction action=new MAction(表名))
{
action.Set(字段名,“[字段名]+1”);
action.Update("id=1");
}
但是這種方式,實現起來,沒想象的簡單,而且這值是字符串還是表達式?分不清也說不明,所以一直卡在以何種使用方式上。
CYQ.Data 框架設計原則:
CYQ.Data 框架的設計,很多時候,是先思考使用的方法,再去想怎么實現的,先想象出最簡單的使用方式,再去想能不能實現,而不是實現了一個功能,卻很難使用。
為此,但網友又對我提出這種需求的要求時,我又花了N個小時,看着代碼發呆,每次我思考問題或有某項功能時,我都會看着代碼發呆幾個小時。。當然是在不停的思考。。
后來終於設計出最終解決方案:
using(MAction action=new MAction(表名))
{
action.Set(字段名,值);
action.SetExpression(“字段名=字段名+1”);
action.SetExpression(“字段名=len(字段名)+1”);
action.Update();
}
通過增加一個表達式方法,基本上有點萬能了,事實在后端,組成的Update語句大體為:
update 表名 set 表達式,字段名=@字段名 where ...
簡單說,就是表達式只是簡單的被附加到原來的set的后面,最終被組裝成SQL執行,當然了,如果你想高級點用參數化也是可以的。
using (MAction action = new MAction("Blog_Class"))
{
action.SetExpression("count=count+@Value");//表達式升級帶參數化。
action.SetPara("Value", 2, DbType.Int32);//設置參數化值
action.Update();
}
到此,基本上有表達存在,可以處理N種不同的需求了,方便性提升了不少。
補充:
不小心把文章“只允許注冊用戶訪問”給打上勾了,結果發現注冊用戶的閱讀數僅88,根據統計,還有近27個是為了看文章被逼登陸了一下。
周末的行情訪問量這么低?大伙都跑哪去偷情了?