【原創(chuàng)】自己動(dòng)手寫(xiě)工具----XSmartNote

一、前面的話

在動(dòng)筆之前,一直很糾結(jié)到底要不要繼續(xù)完成這個(gè)工具,因?yàn)樯洗谓o它碼代碼還是一年多之前的事情,參考自己動(dòng)手寫(xiě)工具----XSmartNote [Beta 2.0],這篇博文里,很多園友提出了寶貴的意見(jiàn)。最后決定吸收?qǐng)@友的建議把這個(gè)工具重構(gòu)一下。首先給它換了個(gè)名 稱,XSmartNote。因?yàn)楦鞣N自身的原因,并沒(méi)有完成這個(gè)工具的基本功能,只是實(shí)現(xiàn)了基本的框架。最近有點(diǎn)時(shí)間就搞了一下,權(quán)當(dāng)做打下基礎(chǔ)。本來(lái)想用B/S結(jié)構(gòu)來(lái)重新搞一下,畢竟園子里有很多大牛都是專注于ASP.NET MVC,但仔細(xì)想想還是不要總寫(xiě)一些爛尾樓工程的好,其實(shí)采用那種架構(gòu)都無(wú)所謂,畢竟是個(gè)人使用的小工具,一個(gè)是事件驅(qū)動(dòng)、一個(gè)是請(qǐng)求響應(yīng)模型,不同的也是只表現(xiàn)方式不一樣。

二、XSmartNote能干什么?

每天都在關(guān)注著園子里的動(dòng)態(tài),看著各位大神分享著各種新技術(shù),感覺(jué)自己要學(xué)習(xí)的東西太多了,但是各種知識(shí)點(diǎn)零零散散地沒(méi)有分門(mén)別類,看過(guò)后又忘記了,很難達(dá)到學(xué)習(xí)的效果。所以希望能通過(guò)對(duì)知識(shí)的標(biāo)簽化,進(jìn)行分門(mén)別類的總結(jié)梳理,想看的時(shí)候,通過(guò)標(biāo)簽來(lái)查找過(guò)濾出相關(guān)的知識(shí)點(diǎn),進(jìn)行學(xué)習(xí)和鞏固,豈不美哉~這也同樣適用于對(duì)編程經(jīng)驗(yàn)的總結(jié),養(yǎng)成習(xí)慣后,時(shí)間久了,所積累下來(lái)的可是一筆不小的知識(shí)財(cái)富。補(bǔ)充一句,有人會(huì)說(shuō)現(xiàn)在網(wǎng)上有很多很多的現(xiàn)成的工具,如印象筆記、有道云筆記,各種筆記... ...干嘛不用?我只想說(shuō),用自己造的東西會(huì)很爽好嘛!

三、和上一個(gè)版本有什么區(qū)別?

在上一個(gè)版本中,只是簡(jiǎn)單地勾勒出一個(gè)大概的輪廓,目前的版本對(duì)上一個(gè)版本進(jìn)行了擴(kuò)充和實(shí)現(xiàn),與上一個(gè)版本還是有很大區(qū)別的。

1、底層數(shù)據(jù)操作

數(shù)據(jù)層由原來(lái)基本的最基礎(chǔ)的ADO.NET操作,新版本中摒棄了最基本的SQL操作,采用了NHibernate框架,該框架為我們封裝了很多的功能,這樣就大大減少了工作量,避免了過(guò)多的sql腳本的編寫(xiě),同時(shí)也避免了由腳本數(shù)量過(guò)大不可避免產(chǎn)生Bug的問(wèn)題。NHibernate框架提供了對(duì)原生sql的支持,多表查詢和復(fù)雜查詢,可以直接使用原生sql,還支持Example查詢。NHibernate配備了一種非常強(qiáng)大的查詢語(yǔ)言HQL,這種語(yǔ)言看上去很像SQL。但是不要被語(yǔ)法結(jié)構(gòu)上的相似所迷惑,HQL是有意識(shí)地被設(shè)計(jì)為完全面向?qū)ο蟮牟樵冋Z(yǔ)言,它可以理解如繼承、多態(tài)和關(guān)聯(lián)之類的概念。NHibernate框架還有很多高級(jí)功能,如事務(wù)并發(fā)、提高性能的二級(jí)緩存等,由于沒(méi)有使用,暫且不做討論。

以下代碼實(shí)現(xiàn)了根據(jù)Post的Id找到所有Tag,借助ADO.NET原生數(shù)據(jù)操作方式,可以看到,需要自己手動(dòng)編寫(xiě)SQL腳本,這僅僅是這個(gè)小的功能點(diǎn),如果涉及的表相對(duì)較多,那出錯(cuò)的幾率就會(huì)大大提升,而且錯(cuò)誤在編譯期是看不出來(lái)的,這樣就有可能會(huì)把錯(cuò)誤推向運(yùn)行期。

原數(shù)據(jù)庫(kù)操作代碼

下面來(lái)看看采用NHibernate框架后,這段代碼的實(shí)現(xiàn)??梢悦黠@地看出,代碼量減少,結(jié)構(gòu)清晰,僅僅需要一行代碼就可以取得指定Post的所有Tag。

采用NHibernate框架

2、界面優(yōu)化

先看下整體效果:

整體效果

多主題支持:


多彩主題

在上一個(gè)版本中,由于只顧架構(gòu)功能的設(shè)計(jì),沒(méi)有把重心放在界面的美化上。該版本采用了免費(fèi)的CSkin界面庫(kù),對(duì)于提升界面UI整體的效果還是不錯(cuò)的,只需引用相關(guān)DLL組件即可。CSkin界面庫(kù)是免費(fèi)使用的,但是源碼并不開(kāi)源。以下是官方對(duì)CSkin界面庫(kù)的簡(jiǎn)要的描述。

精簡(jiǎn)大量不必要代碼,減小UI庫(kù)體積,優(yōu)化程序速度,使得庫(kù)更加輕巧好用。
啟用全新CSkin界面引擎,重塑界面UI每個(gè)角落,帶來(lái)嶄新體驗(yàn),更加流暢輕快簡(jiǎn)潔,更不簡(jiǎn)單。
大量減少生硬的變換效果,注入更多輕快靈動(dòng)的變化反饋,響應(yīng)迅速。
同時(shí)支持多主題切換,目前有玫瑰紅、寶石藍(lán)、青蔥綠、小鴨黃等主題(主題名稱是我自己想的,有更好的意見(jiàn)可以告訴我),后續(xù)會(huì)支持更多主題配色方案,并且開(kāi)放接口,允許以插件的方式開(kāi)發(fā)自己喜歡的主題樣式。同時(shí)增加了主界面對(duì)各個(gè)分辨率屏幕尺寸的自適應(yīng)。讓工具不僅僅是工具,用起來(lái)更舒心,提高使用的積極性。

3、提升性能

重構(gòu)代碼的時(shí)候,發(fā)現(xiàn)有好多代碼段大量地創(chuàng)建新對(duì)象,如果我們使用過(guò)程中,積累的Note和標(biāo)簽越來(lái)越多,是會(huì)影響到工具性能的,所以把一些常用的設(shè)計(jì)模式融入到軟件之中。例如,每個(gè)實(shí)體都有一個(gè)自己的數(shù)據(jù)庫(kù)操作類,這里我把數(shù)據(jù)庫(kù)操作類封裝成單例模式,這樣每次使用的都是同一個(gè)對(duì)象,如果不存在該對(duì)象或該對(duì)象被銷毀才會(huì)創(chuàng)建新的對(duì)象,這樣就提升了工具的性能。例如,下面的主題管理類:

提升性能

以及每個(gè)實(shí)體的數(shù)據(jù)操作類,這里以PostContents為例:

其他應(yīng)用

4、自定義控件

更新了若干個(gè)用戶自定義控件,包括帶CheckBox的可選標(biāo)簽、普通的Note展示標(biāo)簽以及僅用于展示標(biāo)簽的圓角矩形控件,采用自定義控件可以最大程度上靈活地控制控件的屬性以及事件,無(wú)論從靈活性和外觀上都是不錯(cuò)的選擇。后面的文章我會(huì)單獨(dú)把控件拿出來(lái)分享。


更新的自定義控件

四、以后會(huì)有什么炫酷功能?

關(guān)于這個(gè)問(wèn)題,我很認(rèn)真地思考了一下,大概總結(jié)了如下幾個(gè)功能點(diǎn):

1、 目前的版本還尚未實(shí)現(xiàn)根據(jù)標(biāo)簽篩選Note的功能,只是將標(biāo)簽與Note相關(guān)聯(lián),后續(xù)版本會(huì)根據(jù)標(biāo)簽進(jìn)行實(shí)時(shí)過(guò)濾;
2、 對(duì)代碼片段的支持,我會(huì)編寫(xiě)一個(gè)用戶控件專門(mén)用于對(duì)代碼編輯的支持,它和文本編輯的方式是不同的,我覺(jué)得這是最炫酷的功能啦;
3、 增加控制面板,把一些功能的接口暴露出來(lái),以控制面板的方式展現(xiàn)在用戶面前,隨心所欲地進(jìn)行配置,如主界面透明度、顏色、控件屬性等,更加豐富靈活;
4、 集成自定義翻頁(yè)控件,目前的版本右側(cè)Note展示區(qū)域默認(rèn)顯示某類別下的所有Note,并且存在萬(wàn)惡的滾動(dòng)條,用起來(lái)不是很方便,所以我會(huì)集成一個(gè)漂亮的翻頁(yè)控件,目前正在開(kāi)發(fā)中;
5、 支持插件式開(kāi)發(fā),工具會(huì)提供一些接口,以插件的方式開(kāi)發(fā)用戶自己的特有功能,比如以插件的方式開(kāi)發(fā)自己喜歡的主題或是一些定制功能;
6、 添加系統(tǒng)日志,記錄用戶的每一個(gè)操作,以及系統(tǒng)錯(cuò)誤信息收集。
7、 多數(shù)據(jù)庫(kù)支持。目前我采用的數(shù)據(jù)庫(kù)是SQL Server 2008 R2版本,有點(diǎn)大材小用了,后續(xù)會(huì)支持Access、SQLite,這樣就會(huì)便于攜帶,放在U盤(pán)里也可以喲~

五、嘮叨一下

目前這個(gè)小工具在功能層面還處在初級(jí)階段,上面第四點(diǎn)中提及的功能好多都還沒(méi)有實(shí)現(xiàn),本文中只截取了一點(diǎn)點(diǎn)代碼用于解釋版本差異,全部代碼我會(huì)發(fā)布到GitHub上。由于本人時(shí)間和精力有限,所以希望園子里有興趣的園友能和我一起完善這個(gè)工具。在這里附上GitHub地址,XSmartNode 。求Star,求Star,求Star。后面的文章中我會(huì)把相關(guān)的控件開(kāi)發(fā)過(guò)程貼出來(lái),都是一些基礎(chǔ)性的東西,希望對(duì)初學(xué)者有所幫助,大神請(qǐng)繞道。本人能力有限,如果在表述的過(guò)程中有什么錯(cuò)誤,還請(qǐng)多多指教,感激不盡。另外,我會(huì)把本篇文章同步發(fā)布到我的博客園上。如果覺(jué)得文章還可以,請(qǐng)推薦一下哦,您的推薦是我寫(xiě)工具的最大動(dòng)力!

作者:悠揚(yáng)的牧笛
博客地址:http://www.cnblogs.com/xhb-bky-blog/p/5504570.html
聲明:本博客原創(chuàng)文字只代表本人工作中在某一時(shí)間內(nèi)總結(jié)的觀點(diǎn)或結(jié)論,與本人所在單位沒(méi)有直接利益關(guān)系。非商業(yè),未授權(quán)貼子請(qǐng)以現(xiàn)狀保留,轉(zhuǎn)載時(shí)必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容