一、前面的話
在動筆之前鹰贵,一直很糾結(jié)到底要不要繼續(xù)完成這個工具煤惩,因為上次給它碼代碼還是一年多之前的事情笛质,參考自己動手寫工具----XSmartNote [Beta 2.0],這篇博文里讶舰,很多園友提出了寶貴的意見。最后決定吸收園友的建議把這個工具重構(gòu)一下需了。首先給它換了個名 稱跳昼,XSmartNote。因為各種自身的原因肋乍,并沒有完成這個工具的基本功能鹅颊,只是實現(xiàn)了基本的框架。最近有點時間就搞了一下墓造,權(quán)當做打下基礎堪伍。本來想用B/S結(jié)構(gòu)來重新搞一下锚烦,畢竟園子里有很多大牛都是專注于ASP.NET MVC,但仔細想想還是不要總寫一些爛尾樓工程的好帝雇,其實采用那種架構(gòu)都無所謂涮俄,畢竟是個人使用的小工具,一個是事件驅(qū)動尸闸、一個是請求響應模型彻亲,不同的也是只表現(xiàn)方式不一樣。
二吮廉、XSmartNote能干什么苞尝?
每天都在關(guān)注著園子里的動態(tài),看著各位大神分享著各種新技術(shù)宦芦,感覺自己要學習的東西太多了宙址,但是各種知識點零零散散地沒有分門別類,看過后又忘記了调卑,很難達到學習的效果抡砂。所以希望能通過對知識的標簽化,進行分門別類的總結(jié)梳理令野,想看的時候舀患,通過標簽來查找過濾出相關(guān)的知識點,進行學習和鞏固气破,豈不美哉~這也同樣適用于對編程經(jīng)驗的總結(jié)聊浅,養(yǎng)成習慣后,時間久了现使,所積累下來的可是一筆不小的知識財富低匙。補充一句,有人會說現(xiàn)在網(wǎng)上有很多很多的現(xiàn)成的工具碳锈,如印象筆記顽冶、有道云筆記,各種筆記... ...干嘛不用售碳?我只想說强重,用自己造的東西會很爽好嘛!
三贸人、和上一個版本有什么區(qū)別间景?
在上一個版本中,只是簡單地勾勒出一個大概的輪廓艺智,目前的版本對上一個版本進行了擴充和實現(xiàn)倘要,與上一個版本還是有很大區(qū)別的。
1十拣、底層數(shù)據(jù)操作
數(shù)據(jù)層由原來基本的最基礎的ADO.NET操作封拧,新版本中摒棄了最基本的SQL操作志鹃,采用了NHibernate框架,該框架為我們封裝了很多的功能泽西,這樣就大大減少了工作量曹铃,避免了過多的sql腳本的編寫,同時也避免了由腳本數(shù)量過大不可避免產(chǎn)生Bug的問題尝苇。NHibernate框架提供了對原生sql的支持铛只,多表查詢和復雜查詢,可以直接使用原生sql糠溜,還支持Example查詢淳玩。NHibernate配備了一種非常強大的查詢語言HQL,這種語言看上去很像SQL非竿。但是不要被語法結(jié)構(gòu)上的相似所迷惑蜕着,HQL是有意識地被設計為完全面向?qū)ο蟮牟樵冋Z言,它可以理解如繼承红柱、多態(tài)和關(guān)聯(lián)之類的概念承匣。NHibernate框架還有很多高級功能,如事務并發(fā)锤悄、提高性能的二級緩存等韧骗,由于沒有使用,暫且不做討論零聚。
以下代碼實現(xiàn)了根據(jù)Post的Id找到所有Tag袍暴,借助ADO.NET原生數(shù)據(jù)操作方式,可以看到隶症,需要自己手動編寫SQL腳本政模,這僅僅是這個小的功能點,如果涉及的表相對較多蚂会,那出錯的幾率就會大大提升淋样,而且錯誤在編譯期是看不出來的,這樣就有可能會把錯誤推向運行期胁住。
下面來看看采用NHibernate框架后趁猴,這段代碼的實現(xiàn)”爰可以明顯地看出躲叼,代碼量減少,結(jié)構(gòu)清晰企巢,僅僅需要一行代碼就可以取得指定Post的所有Tag。
2让蕾、界面優(yōu)化
先看下整體效果:
多主題支持:
在上一個版本中浪规,由于只顧架構(gòu)功能的設計或听,沒有把重心放在界面的美化上。該版本采用了免費的CSkin界面庫笋婿,對于提升界面UI整體的效果還是不錯的誉裆,只需引用相關(guān)DLL組件即可。CSkin界面庫是免費使用的缸濒,但是源碼并不開源足丢。以下是官方對CSkin界面庫的簡要的描述。
精簡大量不必要代碼庇配,減小UI庫體積斩跌,優(yōu)化程序速度,使得庫更加輕巧好用捞慌。
啟用全新CSkin界面引擎耀鸦,重塑界面UI每個角落,帶來嶄新體驗啸澡,更加流暢輕快簡潔袖订,更不簡單。
大量減少生硬的變換效果嗅虏,注入更多輕快靈動的變化反饋洛姑,響應迅速。
同時支持多主題切換皮服,目前有玫瑰紅楞艾、寶石藍、青蔥綠冰更、小鴨黃等主題(主題名稱是我自己想的产徊,有更好的意見可以告訴我),后續(xù)會支持更多主題配色方案蜀细,并且開放接口舟铜,允許以插件的方式開發(fā)自己喜歡的主題樣式。同時增加了主界面對各個分辨率屏幕尺寸的自適應奠衔。讓工具不僅僅是工具谆刨,用起來更舒心,提高使用的積極性归斤。
3痊夭、提升性能
重構(gòu)代碼的時候,發(fā)現(xiàn)有好多代碼段大量地創(chuàng)建新對象脏里,如果我們使用過程中她我,積累的Note和標簽越來越多,是會影響到工具性能的,所以把一些常用的設計模式融入到軟件之中番舆。例如酝碳,每個實體都有一個自己的數(shù)據(jù)庫操作類,這里我把數(shù)據(jù)庫操作類封裝成單例模式恨狈,這樣每次使用的都是同一個對象疏哗,如果不存在該對象或該對象被銷毀才會創(chuàng)建新的對象,這樣就提升了工具的性能禾怠。例如返奉,下面的主題管理類:
以及每個實體的數(shù)據(jù)操作類,這里以PostContents為例:
4吗氏、自定義控件
更新了若干個用戶自定義控件芽偏,包括帶CheckBox的可選標簽、普通的Note展示標簽以及僅用于展示標簽的圓角矩形控件牲证,采用自定義控件可以最大程度上靈活地控制控件的屬性以及事件哮针,無論從靈活性和外觀上都是不錯的選擇。后面的文章我會單獨把控件拿出來分享坦袍。
四十厢、以后會有什么炫酷功能?
關(guān)于這個問題捂齐,我很認真地思考了一下蛮放,大概總結(jié)了如下幾個功能點:
1、 目前的版本還尚未實現(xiàn)根據(jù)標簽篩選Note的功能奠宜,只是將標簽與Note相關(guān)聯(lián)包颁,后續(xù)版本會根據(jù)標簽進行實時過濾;
2压真、 對代碼片段的支持娩嚼,我會編寫一個用戶控件專門用于對代碼編輯的支持,它和文本編輯的方式是不同的滴肿,我覺得這是最炫酷的功能啦岳悟;
3、 增加控制面板泼差,把一些功能的接口暴露出來贵少,以控制面板的方式展現(xiàn)在用戶面前,隨心所欲地進行配置堆缘,如主界面透明度滔灶、顏色、控件屬性等吼肥,更加豐富靈活录平;
4麻车、 集成自定義翻頁控件,目前的版本右側(cè)Note展示區(qū)域默認顯示某類別下的所有Note萄涯,并且存在萬惡的滾動條绪氛,用起來不是很方便,所以我會集成一個漂亮的翻頁控件涝影,目前正在開發(fā)中;
5争占、 支持插件式開發(fā)燃逻,工具會提供一些接口,以插件的方式開發(fā)用戶自己的特有功能臂痕,比如以插件的方式開發(fā)自己喜歡的主題或是一些定制功能伯襟;
6、 添加系統(tǒng)日志握童,記錄用戶的每一個操作姆怪,以及系統(tǒng)錯誤信息收集。
7澡绩、 多數(shù)據(jù)庫支持稽揭。目前我采用的數(shù)據(jù)庫是SQL Server 2008 R2版本,有點大材小用了肥卡,后續(xù)會支持Access溪掀、SQLite,這樣就會便于攜帶步鉴,放在U盤里也可以喲~
五揪胃、嘮叨一下
目前這個小工具在功能層面還處在初級階段,上面第四點中提及的功能好多都還沒有實現(xiàn)氛琢,本文中只截取了一點點代碼用于解釋版本差異喊递,全部代碼我會發(fā)布到GitHub上。由于本人時間和精力有限阳似,所以希望園子里有興趣的園友能和我一起完善這個工具骚勘。在這里附上GitHub地址,XSmartNode 障般。求Star,求Star调鲸,求Star。后面的文章中我會把相關(guān)的控件開發(fā)過程貼出來挽荡,都是一些基礎性的東西藐石,希望對初學者有所幫助,大神請繞道定拟。本人能力有限于微,如果在表述的過程中有什么錯誤逗嫡,還請多多指教,感激不盡株依。另外驱证,我會把本篇文章同步發(fā)布到我的博客園上。如果覺得文章還可以恋腕,請推薦一下哦抹锄,您的推薦是我寫工具的最大動力!
作者:悠揚的牧笛
博客地址:http://www.cnblogs.com/xhb-bky-blog/p/5504570.html
聲明:本博客原創(chuàng)文字只代表本人工作中在某一時間內(nèi)總結(jié)的觀點或結(jié)論荠藤,與本人所在單位沒有直接利益關(guān)系伙单。非商業(yè),未授權(quán)貼子請以現(xiàn)狀保留哈肖,轉(zhuǎn)載時必須保留此段聲明吻育,且在文章頁面明顯位置給出原文連接。