開源博客OXITE,這個(gè)博客系統(tǒng)是使用ASP.NET MVC來實(shí)現(xiàn),最新版本的是2009年2月15發(fā)布的。MVC并不是什么新東西,我研究OXITE主要的目的其實(shí)就是為了學(xué)習(xí)MVC而已。所以我們從結(jié)構(gòu)上去分析這個(gè)東西,因?yàn)橐淮螌懛治鲱惖奈恼拢赡軐懙牟⒉缓谩?吹秸f得不準(zhǔn)確的歡迎指出,一起進(jìn)步嘛。
一、什么是Oxite;
Oxite是微軟發(fā)布的開源博客平臺(tái)。
Oxite平臺(tái)使用微軟公共許可(Microsoft Public License)授權(quán)方式,這是微軟經(jīng)過開放源代碼促進(jìn)會(huì)(OIS)認(rèn)證的開源許可之一。
微軟稱,Oxite是一種具有可拓展性的、標(biāo)準(zhǔn)兼容的內(nèi)容管理系統(tǒng),旨在支持博客或更大型的網(wǎng) 站,能支持廣播、引用通告、匿名或驗(yàn)證評論、個(gè)人全球統(tǒng)一標(biāo)識(shí)(Gravatar)頭像及在任何頁面級別輸出RSS Feed等功能。用戶可在某一站點(diǎn)上創(chuàng)建和編輯一整套頁面,并可在頁面中定制HTML代碼,而且還可在單個(gè)站點(diǎn)上創(chuàng)建多個(gè)博客。
微軟稱,開發(fā)Oxite平臺(tái)的最初目的就是向開發(fā)者展示ASP.Net MVC的功能。
微軟使用Oxite創(chuàng)建了Mix Online網(wǎng)站,并向開發(fā)者提供了該站點(diǎn)的源代碼以供學(xué)習(xí)。Mix Online是一個(gè)網(wǎng)絡(luò)社區(qū),其中心內(nèi)容是微軟的Mix網(wǎng)絡(luò)開發(fā)者會(huì)議。
微軟Oxite項(xiàng)目負(fù)責(zé)人埃里克·波特爾(Erik Porter)稱,Oxite并非現(xiàn)有的、已經(jīng)確立的博客系統(tǒng)的直接競爭者,也無意挑戰(zhàn)微軟自身的SharePoint工具,后者也帶有內(nèi)容管理系統(tǒng)的功能。他表示,Oxite平臺(tái)目前的對象僅為開發(fā)者,但最終可能適用于全體公眾。
埃里克·波特爾(Erik
Porter)在一個(gè)Oxite論壇上寫道:“我們對Oxite平臺(tái)沒有任何其他計(jì)劃,只是希望為開發(fā)者提供一個(gè)能運(yùn)行任何站點(diǎn)的范本。也就是說,到目前為止它只是一個(gè)社區(qū)項(xiàng)目,但如果社區(qū)決定要把它帶往其他方向,我們也不會(huì)加以阻止。”
二、我為什么選擇Oxite
對于Oxite其實(shí)我只是在無聊的時(shí)候想找下相關(guān)MVC開發(fā)的現(xiàn)成項(xiàng)目。所以就進(jìn)行了一番研究,我覺得這個(gè)系統(tǒng)十分適合初學(xué)者,如果你覺得不能理解面向?qū)ο螅梢哉J(rèn)真看一下這個(gè)Oxite,它充分的現(xiàn)實(shí)出面向?qū)ο蠼5乃枷耄趯W(xué)校學(xué)習(xí)的時(shí)候我們老師總會(huì)用車,人之類的來描述面向?qū)ο螅覀冊诰W(wǎng)上看到的大部分代碼,真正用到面向?qū)ο笏枷氲钠鋵?shí)不多。甚至可以說是教程式的。完全不能體現(xiàn)出面向?qū)ο蟮木琛?/span>Oxite是輕量級的,它并不像petshop那個(gè)巨型和復(fù)雜。可能你第一打開代碼的時(shí)候會(huì)被他的類庫項(xiàng)目嚇著。。當(dāng)你靜下心來的時(shí)候。你會(huì)發(fā)現(xiàn),這個(gè)是一個(gè)很好的學(xué)習(xí)型作品。
三、所需環(huán)境
1. Visual Studio 2008
SP1,
2. ASP.Net MVC 1.0
3. xunit-1.5
4.
AntiXssLibraryV1.5Installer.msi
5. Enterprise Library
4.1 - October 2008.msi
6. Microsoft SQL Server
2005
7. BlogML 2.zip
以上是我使用的版本,這些版本能讓整個(gè)項(xiàng)目跑起來。頁面很簡單,也很簡潔,因?yàn)檫@個(gè)項(xiàng)目目前只是一個(gè)顯示技術(shù)的作用的項(xiàng)目。
四、項(xiàng)目結(jié)構(gòu)
Oxite解決方案由5個(gè)項(xiàng)目組成:
1. Oxite; (核心基礎(chǔ)項(xiàng)目)
2.
Oxite.LinqToSqlDataProvider;(數(shù)據(jù)基礎(chǔ)項(xiàng)目依賴于Oxite)
3. Oxite.Mvc;(相當(dāng)于MVC中的C層,Controllers層的作用,依賴于Oxite)
4. Oxite.Mvc.Tests;(測試層)
5.
OxiteSite;(顯示層)
M其實(shí)就是1,2,C是3,V是5
相信看到這里大家都可以看到已經(jīng)基本可以運(yùn)行期這個(gè)系統(tǒng)了。下一章,我將會(huì)是解析數(shù)據(jù)庫
posted @
2009-07-22 08:39 ^喬喬^ 閱讀(3087) |
評論 (1) |
編輯 收藏
如何學(xué)習(xí)編程
大家第一次接觸編程的時(shí)候我想很多人都會(huì)在那些Q群啊之類的地方不斷的問,怎么學(xué)習(xí)編程,要看些那些書。甚至在百度,谷歌里搜索如何學(xué)習(xí)編程。
這篇文章,我會(huì)從我自己學(xué)習(xí)編程的角度去描述,如何學(xué)習(xí),可能不是最好的學(xué)習(xí)方法,但是我想對于一些朋友總會(huì)有幫助的,因?yàn)榉椒ㄊ窃醋阅銈€(gè)人。我在這里說一下我的格言:別去想別人怎么做,首先應(yīng)該想自己怎么做。別去想別人怎么幫助你。首先想自己幫助自己。
想想我自己學(xué)習(xí)編程也有好多年啦。初三開始小打小鬧的用C語言寫個(gè)無聊的printf()到用HTML寫幾個(gè)個(gè)人網(wǎng)站。雖然沒啥技術(shù)含量不過都是自己的勞動(dòng),那時(shí)候真的很激動(dòng),現(xiàn)在回想起來,其實(shí)那時(shí)候很幼稚。不過也造就了我的興趣吧!好了閑話就少說了,我們?nèi)胝}。
在學(xué)習(xí)之前,請?jiān)试S自己先問下自己:我為什么要做這樣的事。對于編程,我會(huì)先問一下,你為什么要學(xué)習(xí)編程?你會(huì)怎么回答?
A:興趣;
B:讀書需要;
C:傳聞是高薪職業(yè);
D:容易就業(yè);
E:被逼的;
F:無聊學(xué)學(xué);
這個(gè)你會(huì)怎么選擇;什么樣的目的,得到什么樣的結(jié)果。如果你選擇(A)我會(huì)開心,興趣就是動(dòng)力,就算沒有人教,你也會(huì)鼓足勇氣去學(xué)習(xí),就我個(gè)人來說,我是那種屁股坐不穩(wěn)的人,你叫我坐在那里什么都不做半個(gè)小時(shí),我會(huì)全身都不舒服的。但是一說到計(jì)算機(jī),編程我可以一坐就是7,8個(gè)小時(shí)自己還沒感覺。興趣第一,很好,你以這個(gè)為目的我相信你一定能學(xué)好。相信你也有自己的一套學(xué)習(xí)方式。
如果你選擇的是B:那么你也有一定的成功幾率,首先你要是一個(gè)會(huì)讀書的人,可以說讀書就是你的興趣,那么你也可以學(xué)好。當(dāng)然如果只是隨潮流大家都讀所以我也要讀,那么你只能學(xué)不好了。
如果你選擇的是C:那么你還是早點(diǎn)放棄吧,那些擁有高薪的都是十分牛的人,其實(shí)的廣大程序員還是掙扎在生活的水平線上。混飯吃而已,所以如果你抱著高薪去學(xué)習(xí)編程,你一定肯痛苦。這類也是最能有成就的一類,編程是技術(shù)需要的是一份執(zhí)著,但是你的執(zhí)著只是金錢。技術(shù)現(xiàn)在并不等于金錢。。。。
如果你選擇的是D:我還是勸你早點(diǎn)放棄,現(xiàn)在的就業(yè)也不樂觀啊,失業(yè)大軍里計(jì)算機(jī)就占了很大的一部分比重,你隨時(shí)都可能是其中的一分子。
如果你選擇的是E:很好,你也有可能學(xué)好,前提是逼你的人能一直強(qiáng)逼你下去,讓你進(jìn)步,一句非常經(jīng)典的話:“人都是被逼出來的。。。。。”。你出生的時(shí)候的確是被逼出來的,被你媽媽逼出來,呵呵!
如果你選擇的是F:也不錯(cuò),起碼你無聊的時(shí)候想到的居然是編程,證明編程還能給你帶來樂趣。
既然你已經(jīng)知道為什么學(xué)習(xí)編程,那么我們要做的就是怎么去學(xué)習(xí)了。現(xiàn)在的編程語言很多,上百個(gè)語言,但是無論什么語言,都會(huì)有共同性的。所以你要學(xué)習(xí)編程那么就要先學(xué)習(xí)編程的思想,這個(gè)編程的思想你也只能看一下而已。了解一下計(jì)算機(jī)如何去讀這些編程語言這個(gè)很重要。不了解過個(gè)你學(xué)習(xí)任何編程語言都很難做到靈活運(yùn)用。
你明白了計(jì)算機(jī)是如何讀編程語言是的這個(gè)時(shí)候你就可以開始選擇你學(xué)習(xí)的語言了。至少這些編程語言都是我能看懂的,可以說是自己學(xué)過的。也會(huì)解析一下學(xué)習(xí)這些語言的一些特點(diǎn)。
A: c#.NET
B: Java
C: C/C++
D: PHP
E: JavaScript
F: lua
我只列出了五種,其實(shí)還有更多的語言,有興趣可以自己去找下這些語言的特色.其實(shí)我了出的這些都有一個(gè)特色.都是跟C語言有一定的相似的.
A: C#這個(gè)語言是微軟推出的,目前大部分應(yīng)用都是應(yīng)用在WIN平臺(tái)上,雖然LINUX也能用,但支持還不是太好.編程風(fēng)格上我覺得是最優(yōu)美.至少看起來很舒適,強(qiáng)大的智能感知.編程的學(xué)習(xí)難度分級是:初學(xué)偏易,一般編程中等,高級編程難。梯度不算陡峭。雖然是面向?qū)ο螅乾F(xiàn)在大部分的人都很用到面向?qū)ο笾辽傥以趪鴥?nèi)反編譯很多的應(yīng)用系統(tǒng)的時(shí)候很多都沒有用到編程思想的,雖多就是把類用來實(shí)現(xiàn)腳本編程閉包功能而已。真正使用到面向?qū)ο蟮睦^承多態(tài)的并不多。當(dāng)然也有很多是使用了面向?qū)ο笏枷氲模晕矣X得初學(xué)C#的時(shí)候完全可以放棄對象的繼承,多態(tài)這類比較復(fù)雜的東西。專心學(xué)習(xí)他的語法糖,還有封裝好的API,其實(shí)C#這個(gè)語言已經(jīng)有個(gè)很完善的API基本上的應(yīng)用都可以直接使用API來實(shí)現(xiàn),而且從算法構(gòu)造上也不算復(fù)雜。再加上IDE的智能感知,新手只需要了解各個(gè)命名空間的作用就可以了,智能感知會(huì)幫助我們完成API的調(diào)用(至少你要知道那些方法在那個(gè)空間,怎么用)。所以初學(xué)我把它定義在上手“易”。現(xiàn)在的學(xué)習(xí)其實(shí)并非一定要從記事本開始。學(xué)會(huì)使用IDE學(xué)習(xí)其實(shí)也是一項(xiàng)技能。編程很重要的一點(diǎn)。就是你動(dòng)了多少手,你就收獲了多少,無論你看了多少別人的代碼,如果你不自己動(dòng)手去寫一下,你永遠(yuǎn)沒辦法感受到內(nèi)涵,之前我有部分同學(xué),他們跟我說,現(xiàn)在網(wǎng)上大把代碼,那里需要自己敲得那么辛苦干嘛上網(wǎng)COPY一下就什么都有了,傻瓜才自己手寫。好吧我承認(rèn)我傻瓜。但是自少我現(xiàn)在的水平我敢說,,你只需要給我2樣?xùn)|西我一樣能寫出你上網(wǎng)找的那些代碼。一樣是VS,另一樣是幫助文檔。說起這個(gè)事又令我想起最近公司招聘的一些趣事。最近公司面試了接近80個(gè)人吧,因?yàn)槲覀児镜纳蠙C(jī)考試是不允許上網(wǎng)的。呵呵!你們可以想象一下,不能上網(wǎng)后只有30個(gè)能勉強(qiáng)敲的出代碼的。能做出題目的更是少得可憐。突然我就想,這些人到底有沒基礎(chǔ)的,一個(gè)簡單的登錄功能和上傳文件功能不能上網(wǎng)就不會(huì)寫,我真是狂汗。。。一些號稱三年五年工作經(jīng)驗(yàn)的,居然還寫不出一個(gè)簡單的交叉表查詢。(其實(shí)就10句代碼。。。。)。所以啊過分依靠網(wǎng)絡(luò)怎么可能有自己的技術(shù)積累呢,這些人在我眼里三年五年也成不了構(gòu)架師。。可能十年也去不到構(gòu)架師的水平。
B:JAVA 跟C#類似,傳聞微軟推出C#也是為了對抗JAVA而搞出來的。這兩種語言有很多相似的地方什么是命名的方式上都有很多相似的地方,JAVA也是從C語言里發(fā)展起來的。不過我覺得在學(xué)習(xí)曲線上,初學(xué)要比C#難,中國人普遍英語不太好。而且在IDE上微軟的VS要比JAVA的各類編輯器要優(yōu)勝,主要是在智能感知上,還有一些輔助上。可能很多JAVA的鐵桿FANS會(huì)給我丟西瓜,丟雞蛋了。但我敢說,我說的是事實(shí),JAVA位置一個(gè)環(huán)境都很辛苦,至少我學(xué)習(xí)的時(shí)候是這樣。免費(fèi)啊,JAVA很多東西都是免費(fèi)的,微軟要收費(fèi)的,收費(fèi)肯定好了。。。。我會(huì)偷偷的笑。。。你丫就不用盜版?有了光榮的盜版。收費(fèi)問題根本就不是問題,再說從學(xué)習(xí)的角度。。盜版這些東西根本就無關(guān)痛癢的。。反而更容易召集人氣。。。
C: C語言可以說是非常牛逼的語言,長期位居第一。但是需要投入的精力也不少啊,智能感知一直進(jìn)步不大,可能是因?yàn)槿f惡的宏定義呵呵(這個(gè)萬惡可不是我說的。)當(dāng)然學(xué)習(xí)C語言如果你不懂使用宏定義那么你肯定沒學(xué)過C語言,C語言的宏定義雖然一直在C語言的書本上很少描述但是實(shí)際應(yīng)用卻是不可缺少的,我看過IDSOFT的DOOM的源代碼里簡直就是神一般。但是看起來也真是辛苦。題外話,其實(shí)上面很多語言都是根據(jù)C語言衍生出來的,什么很多特性都是參照了C語言。用很玄幻的說話。C語言是遠(yuǎn)古時(shí)代遺留的強(qiáng)大魔法。既然是遠(yuǎn)古學(xué)習(xí)曲線自然就陡峭得可以,我個(gè)人感覺我的C語言水平其實(shí)都只是菜鳥而已。C++一樣是菜鳥。C++和C其實(shí)我覺得是2個(gè)語言根本不能混為一談的,但是很多招聘之的都把C/C++歸為一類,所以我也把它歸為一類,很多人想問學(xué)C++是不是要先學(xué)C。而且C++的分支多得嚇人。內(nèi)涵也豐富得嚇人。。C語言個(gè)人技術(shù)化,我個(gè)人覺得C/C++起碼要4年才算出師,JAVA是2年,C#都是2年。而且還需要一系列的計(jì)算機(jī)基礎(chǔ),算法基礎(chǔ)等一些東西。而JAVA和C#都把這些東西封裝了成標(biāo)準(zhǔn)的API了,我們只需要使用。但是C/C++這些東西都沒有一個(gè)確定的標(biāo)準(zhǔn)例如界面庫,有人用QT有人用MFC。這些都是不一樣的所以選擇的路也多,學(xué)的東西自然也更多了。但從編程上,并非就是C++的就比用C#的牛。C++只是擁有深厚的歷史,有自己獨(dú)特的文明。是因?yàn)樗奈拿鞫!?/span>
D:PHP 接觸不深,但是我覺得它是一個(gè)制作網(wǎng)頁的好語言,其他領(lǐng)域我并不怎么看好他,我覺得PHP在開發(fā)網(wǎng)頁上有很大的優(yōu)勢,但是開發(fā)B/S級系統(tǒng)應(yīng)用就現(xiàn)得比較力不從心了。所以如果你定位自己作為一個(gè)網(wǎng)頁開發(fā)人員的話,你就應(yīng)該學(xué)習(xí)這種語言。如果是B/S級的應(yīng)用的話,就應(yīng)該使用C#或者JAVA,或者其他的語言。
E:JavaScript,非常有名的腳本語言,如果你想從事B/S的開發(fā),網(wǎng)頁開發(fā),你就一定要學(xué)這個(gè),是一個(gè)必須掌握的技能。學(xué)習(xí)曲線相對比較平坦,而且內(nèi)容也不算多,但是應(yīng)用卻十分靈活的語言。強(qiáng)烈推薦初學(xué)者先學(xué)習(xí)這個(gè)語言,來尋找感覺,因?yàn)檫@個(gè)語言完全不存在編程環(huán)境的問題,你只需要有瀏覽器,記事本,兩樣任何系統(tǒng)都有的軟件就可以編寫它。所以我覺得首先學(xué)習(xí)它會(huì)對你理解編程思想有一定幫助。
F:LUA這個(gè)也是一個(gè)腳本語言,成就這個(gè)語言的名聲是來自一個(gè)叫“魔獸世界”的游戲,目前我了解LUA應(yīng)用的領(lǐng)域比較多都是作為一種嵌入語言,嵌入到C或者C++中去使用,在國內(nèi)很多游戲公司都會(huì)有LUA程序員,部分會(huì)由C語言程序員去兼任。因?yàn)?/span>LUA在語法上和C有很相似的地方,基本對舊的C語言程序員學(xué)習(xí)LUA是無難度的。當(dāng)然也有它的局限性,作為腳本語言它本身就存在不足,而且這個(gè)語言本身就是作為C語言的擴(kuò)展來用的所以,學(xué)習(xí)這個(gè)語言的話,建議先學(xué)習(xí)C語言。或者成就更高(或者而已!)
我個(gè)人是選擇C#作為長期發(fā)展的語言的。我覺得這個(gè)語言比較適合我這種英語不算好,但是又喜歡編程的人。
PS:真心想學(xué)編程的必須要學(xué)習(xí)一定的英語能力,因?yàn)楹芏嗑幊痰南冗M(jìn)思想都是英文的。所以英語好,對成為高手起很大作用的。
知道為什么學(xué)習(xí)編程,又選擇了目標(biāo)語言,接下來就是基礎(chǔ)學(xué)習(xí)了。
這個(gè)基礎(chǔ)學(xué)習(xí),我覺得首先要對一些語法糖熟悉,第二件事情就是要多編,多看,可能你買的書都附帶著實(shí)例代碼的,我覺得對于初學(xué)者,首先你把書上的程序都照著編一次,在這期間,你一定會(huì)遇到無數(shù)的錯(cuò)誤,但是這些錯(cuò)誤將會(huì)是重復(fù)出現(xiàn)的,這個(gè)時(shí)候你就學(xué)會(huì)了如何排錯(cuò),有人說過編程不是一口氣寫出來的,是修改出來的。所以學(xué)習(xí)排錯(cuò)是編程的第一步,雖然隨書光盤有很多代碼,但是這些代碼都不屬于你的。沒有入你腦,唯一讓這些代碼屬于你的辦法就是多抄(打)幾次。當(dāng)你把一本編程的基礎(chǔ)書都看透了。。至少別人問你這本書的知識(shí)你能答得上口,那就是你度過了第一時(shí)期了。你可以進(jìn)入一搬階段了。
一般的階段,這個(gè)階段我把它定義為是把這些語法組織成句子,組織成文章的時(shí)期。我想問下,大家都上過語文課吧,我們來回想一下,我們學(xué)習(xí)語文的過程
字=》詞=》句=》文章;
而編程的學(xué)習(xí)則是這樣的;
變量=》函數(shù)=》類=》架構(gòu)
所以我們在初學(xué)階段做的都是學(xué)那些字,那些詞(其實(shí)就是語法糖)然后我們就會(huì)學(xué)造句,造句的時(shí)候就會(huì)涉及到把什么詞語組合起來會(huì)得到優(yōu)美的句子,而合理的句子,加上合理的邏輯就會(huì)變成一篇優(yōu)美的文章。但是一篇優(yōu)美的文章并非那么簡單的。也就是一個(gè)程序架構(gòu)的優(yōu)美一樣沒那么簡單一樣,需要很多很多學(xué)識(shí)。
posted @
2009-07-20 13:45 ^喬喬^ 閱讀(1874) |
評論 (5) |
編輯 收藏
ADO.NET Entity Framework 是什么?是微軟發(fā)布的一個(gè)對象-關(guān)系映射框架,大家都知道JAVA里有一個(gè)很有名的組合開發(fā)叫SSH,微軟也打造了類似的SSH模式,在VS2008 SP1。微軟集合了兩樣比較重要的東西,一個(gè)是ASP.NET MVC 另外一個(gè)就是ADO.NET Entity Framework ,習(xí)慣上喜歡叫EF。貌似。。還少一個(gè)SPRING就完成了微軟版本的SSH了。當(dāng)然只是感覺上的相似,這個(gè)東西跟SSH完全是兩會(huì)事。
??????ADO.NET Entity Framework是建立在LINQ的基礎(chǔ)上的。提供了從關(guān)系數(shù)據(jù)庫模式到對象的映射。在過去,我們開發(fā)的時(shí)候,都會(huì)先把這些關(guān)系數(shù)據(jù)庫里的表,構(gòu)建對象。過去哦那種開發(fā)模式,我想大家都不陌生了,三層架構(gòu)里,這個(gè)東西是最常用的,而且現(xiàn)在網(wǎng)上也有很多類似的軟件,生成數(shù)據(jù)庫表對象代碼。只是不知道那個(gè)公司把ADO.NET Entity Framework投入了實(shí)際開發(fā)中,在我初步的試用過程中,我覺得ADO.NET Entity Framework的確能幫我們提高開發(fā)速度。但是也有缺陷。就是更新太快,很難投入實(shí)際運(yùn)作,就算是LING現(xiàn)在用的 公司也并不多,大部分都還是停留在2.0時(shí)代。真正要實(shí)現(xiàn)普及難度不是一般的大,1.1到2.0花了2年多才勉強(qiáng)普及,還是在1。1有重大不足的前提下,現(xiàn)在2。0已經(jīng)相對問題,要這些公司更新你到3.5難度還不小啊,至少國內(nèi)是這樣。貌似我還沒有資格評論這些。。。因?yàn)樘贻p。
??? ADO.NET Entity Framework需要定義三層,分別是:邏輯層,概念層,映射層。如果是直接用VS的導(dǎo)航做,這些很方便,但是導(dǎo)航永遠(yuǎn)不能滿足復(fù)雜的現(xiàn)實(shí),所以我們還是需要自己動(dòng)手去一步一步的做,當(dāng)然,如果想先入門一下,可以用導(dǎo)航去感受一下。其實(shí)我也是在學(xué)習(xí)階段,個(gè)人感覺貌似.NET的布局有點(diǎn)像向SSH的方向靠攏,突然看到SP1有這么大的整合感覺到。。。貌似.NET會(huì)有大動(dòng)作。
--------------------------------------------------------背景------來自百度知道---------------------------------------
??????? 長久以來,程序設(shè)計(jì)師和數(shù)據(jù)庫總是保持著一種微妙的關(guān)系,在商用應(yīng)用程序中,數(shù)據(jù)庫一定是不可或缺的元件,這讓程序設(shè)計(jì)師一定要為了連接與訪問數(shù)據(jù)庫而去學(xué)習(xí)
SQL 指令,因此在信息業(yè)中有很多人都在研究如何將程序設(shè)計(jì)模型和數(shù)據(jù)庫集成在一起,對象關(guān)系對應(yīng) (Object-Relational Mapping) 的技術(shù)就是由此而生,像
Hibernate或
NHibernate都是這個(gè)技術(shù)下的產(chǎn)物,而微軟雖然有了
ADO.NET這 個(gè)數(shù)據(jù)訪問的利器,但卻沒有像NHibernate這樣的對象對應(yīng)工具,因此微軟在.NET Framework 2.0發(fā)展時(shí)期,就提出了一個(gè)ObjectSpace的概念,ObjectSpace可以讓應(yīng)用程序可以用完全對象化的方法連接與訪問數(shù)據(jù)庫,其技術(shù)概念 與NHibernate相當(dāng)類似,然而ObjectSpace工程相當(dāng)大,在.NET Framework 2.0完成時(shí)仍無法全部完成,因此微軟將ObjectSpace納入下一版本的.NET Framework中,并且再加上一個(gè)設(shè)計(jì)的工具(Designer),構(gòu)成了現(xiàn)在的 ADO.NET Entity Framework。
Entity Framework 利用了抽象化數(shù)據(jù)結(jié)構(gòu)的方式,將每個(gè)數(shù)據(jù)庫對象都轉(zhuǎn)換成應(yīng)用程序?qū)ο?(entity),而數(shù)據(jù)字段都轉(zhuǎn)換為屬性 (property),關(guān)系則轉(zhuǎn)換為結(jié)合屬性 (association),讓數(shù)據(jù)庫的 E/R 模型完全的轉(zhuǎn)成對象模型,如此讓程序設(shè)計(jì)師能用最熟悉的編程語言來調(diào)用訪問。而在抽象化的結(jié)構(gòu)之下,則是高度集成與對應(yīng)結(jié)構(gòu)的概念層、對應(yīng)層和儲(chǔ)存層,以 及支持 Entity Framework 的數(shù)據(jù)提供者 (provider),讓數(shù)據(jù)訪問的工作得以順利與完整的進(jìn)行。
(1) 概念層:負(fù)責(zé)向上的對象與屬性顯露與訪問。
(2) 對應(yīng)層:將上方的概念層和底下的儲(chǔ)存層的數(shù)據(jù)結(jié)構(gòu)對應(yīng)在一起。
(3) 儲(chǔ)存層:依不同數(shù)據(jù)庫與數(shù)據(jù)結(jié)構(gòu),而顯露出實(shí)體的數(shù)據(jù)結(jié)構(gòu)體,和 Provider 一起,負(fù)責(zé)實(shí)際對數(shù)據(jù)庫的訪問和 SQL 的產(chǎn)生。
posted @
2009-06-22 21:52 ^喬喬^ 閱讀(2529) |
評論 (2) |
編輯 收藏
突然心血來潮寫這篇Blog,因?yàn)樽蛱炷莻€(gè)面試雜錦,其實(shí)面向?qū)ο蠖疾浑y啊,也不難理解。但是很多人覺得很恐怖,所以我就在這里發(fā)表一下,自己對面向?qū)ο蟮睦斫狻O日f下面向?qū)ο螅易钤缃佑|面向?qū)ο笫荍AVA里的,那時(shí)候?qū)W校開了JAVA程序設(shè)計(jì)。因?yàn)樽约涸诟咧芯妥詫W(xué)了C語言啦,所以學(xué)JAVA的時(shí)候沒啥難度。只是在面向?qū)ο蟮臅r(shí)候有一點(diǎn)點(diǎn)卡機(jī)的跡象,為啥?第一,自己一直覺得,繼承和對代碼的復(fù)制粘貼沒啥區(qū)別啊,為什么要弄個(gè)繼承出來。第二,多態(tài),啥叫多態(tài),這個(gè)跟繼承又有什么關(guān)系。。因?yàn)闀镜睦涌梢哉f,打部分都是簡單的,CLASSA繼承與A,然后輸出。。。就這類說明性的代碼,沒錯(cuò)這類代碼是很容易說明繼承的關(guān)系。但是如何令人從理論轉(zhuǎn)化為實(shí)際,有一定的困難。所以真正要感受到這個(gè)還是需要多多的敲下代碼,用心去感受一下,才能理解內(nèi)涵的。第2次接觸面向?qū)ο笫窃诖蠖谝粚W(xué)期,突然心血來潮想學(xué)C++為啥?因?yàn)闊o知- -!為什么說因?yàn)樽约簾o知呢?那時(shí)候我以為,要實(shí)現(xiàn)界面編程只有用C++的MFC去實(shí)現(xiàn),為了學(xué)VC++而開始學(xué)C++。因?yàn)橹坝袀€(gè)JAVA,C語言這類從C語言派生出來的編程語系所以學(xué)C++速度就快上很多。但是也出現(xiàn)了一個(gè)問題,甚至是跟自己學(xué)過的JAVA有很大沖突,C++支持多繼承,私有繼承,等這類繼承。所以一開始有點(diǎn)蒙,而已C++還有一個(gè)析構(gòu)函數(shù)。C/C++被人罵的最多的,就是它的內(nèi)存泄露。什么叫內(nèi)存泄露,我給它的定義是:沒有在適當(dāng)?shù)臅r(shí)候釋放適當(dāng)?shù)膬?nèi)存空間。第三次接觸面向?qū)ο笫荂#大二下學(xué)期。那時(shí)候Net 2.0剛出不是很久。。因?yàn)槲铱催^資料,知道2.0比1.1有跨度更新,所以自己那時(shí)候決定從2.0入手,二放棄1.1,其實(shí)那時(shí)候有學(xué)C#的沖動(dòng)的原因是,JAVA太闊了,而且自己大專出生,JAVA在2006年的時(shí)候簡直就是遍地開花,什么北大清鳥啊,什么達(dá)內(nèi)啊,什么新東方啊,什么巨匠啊等等這類東西(偷偷說句,其實(shí)我蠻鄙視這些培訓(xùn)的,覺得有些東西是需要靠自己去學(xué)的,并不是說在課堂上講下課就可以學(xué)到多少,而且我覺得他們的基礎(chǔ)課程和學(xué)校的沒太大分別。他們一邊打著鄙視高校教育的時(shí)候,一邊做著高校所做的事,所以我覺得比較返感。至于他們的高級課程,我倒是沒有了解,或許有一定的效果,或許而已。。。這個(gè)話題就不說下去了,免得人家拍磚)這個(gè)到和JAVA差別不算太大。我之所以轉(zhuǎn)投C#陣型,其實(shí)是被開源嚇的,為啥?開源太闊了,學(xué)完java基礎(chǔ)學(xué)JSP,學(xué)完JSP學(xué)SSH,學(xué)到這里,才發(fā)現(xiàn)自己已經(jīng)浪費(fèi)了1年多的時(shí)間,還沒有入門,打擊啊。讓后被C#的事件模型吸引,跟著開始C#生涯。開始學(xué)C#我可是老老實(shí)實(shí)從基礎(chǔ)學(xué)起的呢,畢竟那時(shí)候已經(jīng)決定跟著C#混飯吃了,基礎(chǔ)很重要。
??????體驗(yàn)繼承的好處的,你需要學(xué)習(xí)多一樣?xùn)|西,那樣?xùn)|西叫多態(tài)。至于多態(tài),等我那天又再心學(xué)來潮再寫。
C#里的繼承是可以分為3種的(我自己分的),第一種,實(shí)體繼承,第二種虛繼承,第三種接口繼承。有些書籍是這樣分的:實(shí)現(xiàn)繼承,接口繼承。
實(shí)體繼承:這個(gè)是我們經(jīng)常用的,基類有自己的功能。并允許部分功能被子類掩蓋,也是我們經(jīng)常看到的繼承。
虛繼承:這個(gè)類是我自己區(qū)別出來的,因?yàn)檫@個(gè)虛繼承是介乎與實(shí)體繼承和接口繼承之間,虛繼承是指基類之生命了方法,但這類方法沒有任何實(shí)體操作,所有實(shí)體操作都必須由子類實(shí)現(xiàn),并且子類都必須事先虛基類的每一個(gè)方法。
接口繼承:只繼承函數(shù)簽名,沒有繼承任何實(shí)現(xiàn)代碼.
?????? 我打個(gè)比喻,實(shí)體繼承可以比喻為一個(gè)國家,虛繼承就是類似歐盟這樣的組織,接口繼承就是聯(lián)合國。國家是有一定職能的,并且他又行駛這些職能的武力支持,這類職能就是實(shí)體繼承的方法。虛繼承,就是你加入了這個(gè)組織,你就必須要遵守這些制度。但是歐盟是沒有實(shí)體的,也就是沒有職能武力支持,它依靠的是實(shí)體子類(加入歐盟的國家)的武力支持。接口繼承,這個(gè)聯(lián)合國比喻最正確不過。就個(gè)名字,什么某些國家掛著它名字出去為非作歹都沒問題。唯一有用的就是他的名字,但是有時(shí)候你又不能少了這個(gè)名字。
??????? 在C#里不支持多繼承,這個(gè)不支持多繼承是限制在實(shí)體繼承和虛繼承的基礎(chǔ)上的,根據(jù)設(shè)計(jì)C#那個(gè)牛人的意思,多繼承所產(chǎn)生的代碼污染代價(jià)比繼承來的要大,所以他選擇不支持多繼承,但是需要用到多繼承的情況下,他引入了一個(gè)概念,接口。實(shí)體繼承只能是一個(gè),接口可以是好多個(gè),就好比如,某個(gè)公司只是屬于某個(gè)行業(yè),但是它卻擁有很多個(gè)榮譽(yù)稱號。
??????? 上面的分類,只是用來方便我們在什么時(shí)候使用什么樣的繼承。
理解完繼承的分類,我就開始介紹繼承的組成,
虛方法:帶有virtual基類函數(shù)(方法)聲明,子類使用override修飾。在C#中的虛函數(shù)(方法)的概念和標(biāo)準(zhǔn)OOP是一致的,可以在子類中重寫虛函數(shù)。在調(diào)用方法時(shí),會(huì)調(diào)用對象類型的合適方法。?因?yàn)樵贑#里面默認(rèn)情況下都不是虛擬的,但是JAVA在默認(rèn)情況下是虛擬的。所以必須顯式地聲明為virtual才是虛的(構(gòu)造函數(shù)除外)。關(guān)于虛方法上C#和C++是一致的。但是C#子類重寫時(shí)候需要加上override修飾。
隱藏方法:當(dāng)沒有把基類的方法聲明為虛方法的時(shí)候,但是派生類又用到了跟基類方法完全相同的名字的方法(不滿足重載的方法),在C#里我們使用關(guān)鍵字new來聲明,則表示我們要隱藏一個(gè)基類的方法。
當(dāng)我們沒有使用new,也沒有使用virtual-override的時(shí)候,編譯器會(huì)隱式地給我們的代碼加上new,并提示一個(gè)警告,所以在編寫穩(wěn)定代碼的時(shí)候,少用默認(rèn)是個(gè)比較好的習(xí)慣,至少我覺得這個(gè)習(xí)慣很好。雖然C#現(xiàn)在沒有夸平臺(tái)的概念,但是在C++等其他應(yīng)用的時(shí)候,不一樣的平臺(tái)就有不一樣的默認(rèn)方式。當(dāng)然在C++里我們常用宏來解決這個(gè)夸平臺(tái)的。跟那個(gè)默認(rèn)值沒有關(guān)系,我只是舉例,舉些不確定100%恰當(dāng),但是又容易幫助人理解的例子。
???????例如在我們自己開發(fā)服務(wù)器端控件件的時(shí)候,我們經(jīng)常用到base 關(guān)鍵字的,就是調(diào)用基類方法去操作,主要作用是區(qū)分重新方法和基類方法。
抽象類;其實(shí)就是我上面說的虛基類。有一個(gè)比較明顯的特征,有關(guān)鍵字abstract因?yàn)槌橄箢惡停橄蠓椒ǘ际菦]有具體代碼的,他們的實(shí)現(xiàn)具體代碼是依靠子類去實(shí)現(xiàn),例如,有一個(gè)基類動(dòng)物,這個(gè)動(dòng)物是虛基類來的,所有動(dòng)物我們都讓它具備了行走的方法,讓后人這個(gè)子類繼承于動(dòng)物,老虎這個(gè)子類也是繼承于動(dòng)物,人這個(gè)子類的行走方式是用2條腿的,老虎是用4條腿,這樣做的好處就是起到抽象限制作用。我又來一個(gè)比如,我給動(dòng)物下一個(gè)定義,你怎么下?最簡單噶,會(huì)自己動(dòng)的物體。就叫動(dòng)物。好這樣我就定義好了動(dòng)物是會(huì)動(dòng)的,至于怎么動(dòng),是用手動(dòng),還是用腳去動(dòng),還是用身體去動(dòng),沒有沒有細(xì)節(jié)去區(qū)分,只需要知道它動(dòng)了就行,這個(gè)動(dòng)就是抽象。
接口:接口這個(gè)東西雖然沒限制你繼承多少個(gè)?但是繼承了接口,證明這個(gè)類就會(huì)執(zhí)行某些函數(shù)。接口是不能實(shí)現(xiàn)實(shí)體化的,也就是說她沒有溝造函數(shù),接口只是一個(gè)契約,例如你加入某某協(xié)會(huì),協(xié)會(huì)的契約是你需要交會(huì)費(fèi),同時(shí)我們承認(rèn)你是我們協(xié)會(huì)。你可以得到協(xié)會(huì)的內(nèi)部資料。例如我們熟悉的Dispose()方法,這個(gè)方法和C++里的析構(gòu)函數(shù)差不多,用于清理的,它實(shí)現(xiàn)了接口IDisposable,如果你有一個(gè)類加入了IDisposable協(xié)會(huì),那么你將得到權(quán)威的Dispose()方法的承認(rèn),具有IDisposable會(huì)員的合法資格。你加入了聯(lián)合國,并且依照聯(lián)合國的武力條例,那么你將得到聯(lián)合國授權(quán)你是正義的。
接口就是給你一個(gè)“借口”可以光明正大地去“侮辱(污染)”人家。(掛著聯(lián)合國名字光明正大的去干澀它國內(nèi)政。)
繼承的重點(diǎn)就講完了。至于那些訪問規(guī)則就是靠背的,上面那些才是應(yīng)用繼承的細(xì)節(jié)額。體現(xiàn)了如何抽象類,如何使用光明正大的污染代碼等一些使用繼承的模糊信息。我沒有參照任何資料去寫這篇文章的,那么講錯(cuò)了,歡迎大家指出
posted @
2009-06-06 22:00 ^喬喬^ 閱讀(1647) |
評論 (2) |
編輯 收藏
今天在Q群里看到有人發(fā)表面試時(shí)候的題目,看了一下,所以順手在這里發(fā)表一下看法,包括一些題目;
第一類繼承類,
有以下C#代碼
using?System;
class?A


{
????public?A()

????
{
????????test();
????}

????public?virtual?void?test()
{}
}
class?B:A


{
????int?x=1;
????int?y;
????public?B()

????
{
????????y=-1;
????}
????public?override?void?test()

????
{
????????Console.WriteLine("x={0},y={1}",x,y);
????}
????static?void?Main(string[]?args)

????
{
????????B?b=new?B();
????}
}這類是一些很基礎(chǔ)的題目主要考察的是對面向?qū)ο蟮牧私猓?br />首先我們要了解,繼承的時(shí)候,類的聲明,初始化。子類的聲明,內(nèi)部都會(huì)先聲明父類。這里我們可以根據(jù)父親才有孩子的思想去記憶,沒有父親,哪里來孩子呢,
上面的程序父類的構(gòu)造函數(shù)是調(diào)用子類的TEST()方法,我們看一下TEST方法
Console.WriteLine("x={0},y={1}",x,y);

這里是在控制臺(tái)輸出X,Y的值,C#是先初始化A讓后在初始化B,在初始化A的時(shí)候調(diào)用了子類的TEST方法,子類的TEST方法在B沒有初始化的時(shí)候Y是沒有給定值的,在沒有給定值的時(shí)候INT類型CLR會(huì)自動(dòng)初始一個(gè)0到 Y里面去,所以輸出的結(jié)果將會(huì)是1,0,
這道題目涉及到了繼承于多態(tài)。不過都是很基礎(chǔ)的,但是對于新手,或者不是正規(guī)系統(tǒng)地學(xué)習(xí)過C#的人來說。。就會(huì)犯迷糊了。1,0如何出來的。。甚至有人會(huì)認(rèn)為是1,-1,這樣認(rèn)為的原因是,覺得先初始話B類,在初始化A類。我 不知道那類語言是這樣初始化的,但感覺這樣想法本來就不符合人類的習(xí)慣;明顯的:我媽媽生我姐姐的時(shí)候,我?guī)蛬寢専兀?br />
Q群的面試第二道邏輯題;
7.?某一密碼僅使用K、L、M、N、O共5個(gè)字母,密碼中的單詞從左向右排列,密碼單詞必須遵循如下規(guī)則:
(1)?密碼單詞的最小長度是兩個(gè)字母,可以相同,也可以不同
(2)?K不可能是單詞的第一個(gè)字母
(3)?如果L出現(xiàn),則出現(xiàn)次數(shù)不止一次
(4)?M不能使最后一個(gè)也不能是倒數(shù)第二個(gè)字母
(5)?K出現(xiàn),則N就一定出現(xiàn)
(6)?O如果是最后一個(gè)字母,則L一定出現(xiàn)
問題一:下列哪一個(gè)字母可以放在LO中的O后面,形成一個(gè)3個(gè)字母的密碼單詞?
A)?K?B)L?C)?M?D)?N

問題二:如果能得到的字母是K、L、M,那么能夠形成的兩個(gè)字母長的密碼單詞的總數(shù)是多少?
A)1個(gè)?B)3個(gè)?C)6個(gè)?D)9個(gè)

問題三:下列哪一個(gè)是單詞密碼?
A)?KLLN?B)?LOML?C)?MLLO?D)NMKO

這個(gè)邏輯題目其實(shí)不難的,只要是做程序的,或者可以說是,有過代碼經(jīng)歷,或者自己設(shè)計(jì)過算法的人都會(huì)做。但是對于剛出校門的學(xué)生,這道題目。。。對30%左右的人是有難度的。。。。他們會(huì)很執(zhí)著的想,啥是密碼單詞。
上面的1-6是形成密碼單詞的條件,問題其實(shí)就是在這6個(gè)條件下得到的結(jié)果,
問題一:答案是B,為什么是B?因?yàn)闂l件(3)L不只出現(xiàn)1次,根據(jù)題目一個(gè)3個(gè)字母的密碼單詞,LO占了2個(gè),最后一個(gè)字母必定是需要重復(fù)出現(xiàn)的L
問題二:答案是A,為什么是1個(gè)?第一,根據(jù)條件(5),K絕對不會(huì)出現(xiàn),因?yàn)閱栴}里沒有N,那么剩下L,M,LM組合的2個(gè)字母單詞總個(gè)數(shù)是4個(gè),分別是LM,LL,ML,MM;根據(jù)(3)L不只出現(xiàn)1次,所以排除LM,ML,根據(jù)(4)M不能出現(xiàn)在最后一個(gè)字母排除MM,最后只剩下一個(gè)LL。
問題三:這個(gè)問題是考察所有條件的混合應(yīng)用,K不能開頭,排除A,?(4)M不能使最后一個(gè)也不能是倒數(shù)第二個(gè)字母,排除B
(
6)?O如果是最后一個(gè)字母,則L一定出現(xiàn),排除D,剩下的只有C了,所以答案是C
雖然我不知道Q群里那個(gè)仁兄到底面試啥公司。。。但是發(fā)出來的題目。。。沒啥難度啊,只要是有心從事軟件開發(fā)的,應(yīng)該都不難,從公司的角度,面試,筆試,機(jī)試,目標(biāo)都是考察個(gè)人能力是否適合這份工作,這2個(gè)題目,我覺得靠的應(yīng)該是。。。應(yīng)屆生。。
posted @
2009-06-05 12:31 ^喬喬^ 閱讀(1235) |
評論 (1) |
編輯 收藏
摘要: 明鏡臺(tái)原創(chuàng)(轉(zhuǎn)載請保留)?1、Jquery學(xué)習(xí)筆記(一)---- 前言2、Jquery學(xué)習(xí)筆記(二)---- 強(qiáng)大的選擇器
JQuery的選擇器十分強(qiáng)大,本章主要講的是如何靈活應(yīng)用選擇器。根據(jù)手冊,選擇器被分為以下9類。分別是:1、基本;2、層級;3、基本對象屬性;4、內(nèi)容;5、可見性;6、屬性;7、子元素;8、表單;9、表單對象屬性;注意:所有的選擇都是返回對象數(shù)組;返回值:Array&l...
閱讀全文
posted @
2009-06-01 00:58 ^喬喬^ 閱讀(1737) |
評論 (0) |
編輯 收藏
明鏡臺(tái)原創(chuàng)(轉(zhuǎn)載請保留)?
1、
Jquery學(xué)習(xí)筆記(一)---- 前言2、
Jquery學(xué)習(xí)筆記(二)---- 強(qiáng)大的選擇器????? 之所以寫這篇BLOG其實(shí)是有原因的(見
Microsoft Visual Studio 心情記錄),本來想完成了我的LUA后再開始寫的,但是我擔(dān)心完成LUA那個(gè)系列的BLOG后自己沒有心情寫這篇了。本文很多觀點(diǎn)來自JQuery實(shí)戰(zhàn),部分示例也是,但是我將會(huì)在ASP.NET2.0下實(shí)現(xiàn),JQuery的示例是在html或者PHP下。所有示例我都親手敲一次代碼,并進(jìn)行了一定的改進(jìn)。。不會(huì)侵權(quán)吧,我怎么說都花了¥49RMB的。。買了實(shí)體書咯。
---------------來自維基百科----------------
jQuery是一款免費(fèi)且開放源代碼的JavaScript代碼庫,由John?Resig創(chuàng)建。

授權(quán)協(xié)議為GPL和MIT許可證雙協(xié)議。

jQuery?1.3版中,引入全新的CSS選擇器引擎Sizzle。[1]同時(shí)不再提供Packed版本,因?yàn)榻鈮嚎s的消耗的時(shí)間,遠(yuǎn)大于所節(jié)省的下載時(shí)間,且不利于Debug,且已有Google?AJAX?Libraries?API等公開站臺(tái)提供jQuery的js的引用服務(wù),故Packed版本原本的優(yōu)點(diǎn)已蕩然無存。

???? JQuery目前最新的是1.3.2版本,這個(gè)版本你可以找到三類文件,分別是:jquery-1.3.2-vsdoc.js,jquery-1.3.2.js,jquery-1.3.2.min.js
???? jquery-1.3.2-vsdoc.js 是VS的智能感知版本,但這個(gè)版本只能用于智能感知,在瀏覽狀態(tài)下這個(gè)JS存在不少的BUG,但在開發(fā)期能幫我們大大的提高輸入代碼的準(zhǔn)確率。實(shí)際應(yīng)用一定要替換為Min版本。
???? jquery-1.3.2.js 無壓縮,無智能感知版。這個(gè)版本比較大,一般頁面應(yīng)用比較少,會(huì)影響頁面加載。代碼開源。。有興趣可以打開這個(gè)文件仔細(xì)的看一下,偶是沒這個(gè)勇氣的了。
??? jquery-1.3.2.min.js 是最常用的版本,在 1.2時(shí)期這個(gè)壓縮版才27K,但是在1.3版有57K,原因就是我在題頭因用的百科中說明了。
這三個(gè)文件我們都了解了,那么我們在來了解一下,幾個(gè)新的定義
1、什么是JQuery,JQuery是一個(gè)代碼庫,并且有非常多居于它的插件,最大的特點(diǎn)是有,跨瀏覽器支持,簡單第封裝DOM操作等。。想知道更多,可以在GOOGLE里自己找。
2、不唐突的JavaScript;在JQuery里提倡這樣的JavaScript,到底什么是不唐突的JavaScript呢。其實(shí)就是實(shí)現(xiàn)JS代碼和HTML代碼分離,在過去我們習(xí)慣的做法是在標(biāo)記里加入on****=的屬性來進(jìn)行JS交互,在JQuery你將可以在HTML代碼不在出現(xiàn)這樣的東西,你也能輕松的令JS進(jìn)行交互。真正實(shí)現(xiàn)樣式,腳本,標(biāo)記“三權(quán)分立”
3、JQuery強(qiáng)大的選擇器,在過去我們使用DOM的時(shí)候,我們只能通過ID去或者標(biāo)記去找對象,你在JQuery上你可以用CSS來找對象,可以用標(biāo)記去找,甚至支持查詢方式去查找對象。。強(qiáng)大的選擇器是JQuery的一大特色,也是其中一個(gè)重點(diǎn),我將會(huì)有一章詳細(xì)描述。
4、JQuery的鏈?zhǔn)讲僮髟贘Query你將可以令對象好像鏈子那樣一直寫下去。
ag:block.css('display', 'none').addClass('ThreeCategory').appendTo(target).slideDown();
5、Ajax。。在Ajax橫行的今天不支持這個(gè)東西,怎么行。JQuery對Ajax的支持也十分強(qiáng)大,支持了我們傳說中的JSON數(shù)據(jù)分裝,使Ajax操作更加隨心所欲。
6、事件模型,事件其實(shí)就是 JS的其中一個(gè)核心,我們使用JS很大程度上就是因?yàn)樗氖录P汀R獜氐琢私釰Query必須了解他的事件模型。
7、動(dòng)畫效果,在JQuery里有兩個(gè)我們經(jīng)常會(huì)使用的動(dòng)畫效果分別是:滑動(dòng)效果,淡入淡出,靈活的使用這兩個(gè)功能會(huì)令體檢更加豐富。
8、如何擴(kuò)展JQuery,這個(gè)是個(gè)重點(diǎn),我們使用JQuery目標(biāo)是要簡化JS的復(fù)雜度,但JQuery庫畢竟不是萬能的,部分東西還是需要我們自己去編寫,這個(gè)擴(kuò)展JQuery就是令你寫的JS更好的集成到JQuery。同時(shí)那些JQuery插件也是利用了擴(kuò)展JQuery,所以不懂?dāng)U展就不能說懂得JQuery
9、強(qiáng)大插件,了解JQuery的插件,或許你想要的效果,這些插件已經(jīng)幫你實(shí)現(xiàn)了,既然能站在巨人的肩膀上,為什么不去依靠巨人。所謂靠山吃山,靠海吃海,考老豆就吃老豆。。。多點(diǎn)了解JQuery可以令你開發(fā)速度提速
這篇前言就到這里。。。。下面將正式開始JQuery之旅
posted @
2009-05-26 12:10 ^喬喬^ 閱讀(1453) |
評論 (3) |
編輯 收藏
Microsoft Visual Studio 我想所有編程的人都會(huì)熟悉這個(gè)IDE,不熟悉至少都聽說過,Microsoft Visual Studio 這個(gè)命名是從2003版開始的,這個(gè)版本開始就是一個(gè)集合版,里面有WEB,VB,c#,J#,javascript,C++等主流語言,2003版本,本人用得很少,甚至只用過2次,長時(shí)間使用的是2005版,2005和2003有很大的進(jìn)步,2008推出的時(shí)候更是開始使用2008了,其實(shí)2008要比2005要好,首先智能感知上就完美了很多,不用擔(dān)心大小寫問題,尤其是編寫JAVASCRIPT腳本..(2008 SP1)最近使用了JQuery的jquery-1.3.2.min-vsdoc.js"才發(fā)現(xiàn)...原來寫JAVASCRIPT也能像寫C#代碼一樣高效率...不用在擔(dān)心大小寫錯(cuò)誤的問題....以前寫JQuery基本都是在API上復(fù)制參數(shù)的,因?yàn)槭执?容易出,而且JS出錯(cuò)也并不好找,,至于要說如何發(fā)現(xiàn)jquery-1.3.2.min-vsdoc.js的那就要提一下ASP.NET MVC了,雖然這個(gè)框架是榮損參半,但照我個(gè)人感覺來說,這個(gè)框架和VS2008 SP1的搭配還是十分優(yōu)秀的.比一些開源的.NET ,MVC要方便...而且我在ASP.NET MVC里找到很多的struts2.0的影子,因?yàn)槲掖髮W(xué)的時(shí)候花過好大幾個(gè)月去學(xué)習(xí)struts2.0,所以在學(xué)習(xí)和使用ASP.NET MVC上更感覺順手..雖然struts2.0并沒有struts那么風(fēng)光...
??????? 本人寫著篇文章其實(shí)很興奮...所以特寫一篇隨筆來激動(dòng)一下...
????????另外本人本Jquery深深地吸引....努力學(xué)習(xí)ING.....LUA只能停一下了,,LUA畢竟只是興趣...Jquery我覺得將會(huì)給我工作帶來很大的方便...所以決定以后寫JS用Jquery別想我用prototype,除非....prototype也提供智能感知包....
明鏡臺(tái)
posted @
2009-05-18 23:59 ^喬喬^ 閱讀(1872) |
評論 (4) |
編輯 收藏
1、lua學(xué)習(xí)之入門(一)----環(huán)境搭建
2、lua學(xué)習(xí)之入門(二)----基礎(chǔ)語法1
3、lua學(xué)習(xí)之入門(二)----基礎(chǔ)語法2
4、lua學(xué)習(xí)之入門(三)----函數(shù)
???? 在LUA里函數(shù)是個(gè)十分重要的內(nèi)容,因?yàn)槲覀儗?shí)際開發(fā)的時(shí)候,用的最多的就是函數(shù),用函數(shù)是封裝各個(gè)實(shí)現(xiàn),在Q群里曾經(jīng)聽一些大蝦說過,寫LUA必須要懂得閉包,常用系統(tǒng)函數(shù),還有范型for寫迭代器,最后就是編譯和運(yùn)行還有錯(cuò)誤信息.其實(shí)這章,我就卡了一下殼,卡殼的地方在閉包,因?yàn)槲覜]有完全理解閉包的作用,和閉包的好處,網(wǎng)上也沒有明確的說明閉包的優(yōu)劣,所以閉包的概念,我也只能以個(gè)人感覺去寫,如果我說得不對,歡迎賜教.如果對閉包理解很深,歡迎來指教...你要偶拜你為師也行,達(dá)者為師啊,偶很好學(xué)的.
函數(shù)有兩種用途:1.完成指定的任務(wù),這種情況下函數(shù)作為調(diào)用語句使用;2.計(jì)算并返回值,這種情況下函數(shù)作為賦值語句的表達(dá)式使用。
?? 其實(shí)我們接觸最早的,就是函數(shù),還記得我們的第一個(gè)LUA嗎?print();這就是一個(gè)函數(shù).可以理解****()都可以當(dāng)做是函數(shù),其實(shí)大部分編程語言的函數(shù)都是以這個(gè)方式一共調(diào)用的.認(rèn)識(shí)了什么是函數(shù),那么我們就自己編寫一個(gè)函數(shù)吧
function?maxFun(a
,
b)
???
if
?a
>
b?then
???
return
?a;
???
else
?????
return
?b;
??end
end

--
我們用一個(gè)輸出語句把我們的函數(shù)結(jié)果顯示出來
,
證明我們寫的函數(shù)沒有問題

print
(maxFun(
4
,
3
));
上面這個(gè)函數(shù)
,
其實(shí)很簡單就是比較兩個(gè)數(shù)的大小
.
最后運(yùn)行的結(jié)果我們得到結(jié)果是4
,
這里使用的是函數(shù)的第1種任務(wù)
,
判斷兩個(gè)數(shù)的大小
,
在LUA里函數(shù)是可以返回多個(gè)值的
,
這個(gè)點(diǎn)和其他編程語言有很大的區(qū)別
,
那就很容易造成錯(cuò)覺
,
多個(gè)返回值
,
那我如何獲得各個(gè)返回值呢
?
看例子

function?returnAnyValue()
????????
return
?
1
,
2
,
3
,
4
;
???end

????a
,
b
,
c
,
d?
=
?returnAnyValue();
e
,
f
,
g?
=
?returnAnyValue();
h
,
i
,
j
,
k
,
l?
=
?returnAnyValue();

--
[[
print
(
"
a:
"
..
a
..
"
?b:
"
..
b
..
"
?c:
"
..
c
..
"
?d:
"
..
d
..
"
?e:
"
..
e
..
"
?f:
"
..
f
..
"
?g:
"
..
g
..
"
?h:
"
..
h
..
"
?i:
"
..
i
..
"
?j:
"
..
j
..
"
?k:
"
..
k
..
"
?l:
"
..
l
..
"
?!
"
);
]]
--
這樣編譯是出錯(cuò)的
,
提示告訴我們l為nil不能輸出
.
--
所以我們把程序修改為

print
(
"
a:
"
..
a
..
"
?b:
"
..
b
..
"
?c:
"
..
c
..
"
?d:
"
..
d
..
"
?e:
"
..
e
..
"
?f:
"
..
f
..
"
?g:
"
..
g
..
"
?h:
"
..
h
..
"
?i:
"
..
i
..
"
?j:
"
..
j
..
"
?k:
"
..
k
..
"
?!
"
);

結(jié)果如下
:
???a
:
1
?b
:
2
?c
:
3
?d
:
4
?e
:
1
?f
:
2
?g
:
3
?h
:
1
?i
:
2
?j
:
3
?k
:
4
雖然我們不能輸出L的值,但是我們根據(jù)錯(cuò)誤提示可以知道l的值是nil的.
論述完返回值,那么我們要看參數(shù)數(shù)了,LUA支持可變參數(shù)的模式的使用的方法和C語言的差不多,不熟悉的可以先學(xué)C語言,畢竟我看到的LUA大多數(shù)都是嵌入C中的,所以C/C++至少你要會(huì).
好了我們要進(jìn)入我覺得比較難的點(diǎn):閉包
在我接觸的編程語言里,其實(shí)還沒發(fā)現(xiàn)過閉包的概念,坦白的說一句,就是LUA我才接觸閉包的.閉包從網(wǎng)上的資料來看,就是JAVASCRIPT里的匿名函數(shù)的使用(我接觸新語言的時(shí)候,總喜歡用自己接觸過的語言去進(jìn)行對比,去學(xué)習(xí).我覺得這種學(xué)習(xí)的方法還是比較有效果的,有興趣的朋友也可以試試這個(gè)方法.),在我看了網(wǎng)上公開的閉包程序,最大的特點(diǎn)就是使用,外面的函數(shù)有自己的局部變量,內(nèi)部的匿名函數(shù)使用了外部函數(shù)的局部變量.有點(diǎn)像面向?qū)ο笏枷肜锏囊馑?后來我在LUA的一個(gè)論壇看到一篇關(guān)于閉包的定義,如下:
當(dāng)一個(gè)函數(shù)內(nèi)部嵌套另一個(gè)函數(shù)定義時(shí),內(nèi)部的函數(shù)體可以訪問外部的函數(shù)的局部變量,這種特征我們稱作詞法定界。雖然這看起來很清楚,事實(shí)并非如此,詞法定界加上第一類函數(shù)在編程語言里是一個(gè)功能強(qiáng)大的概念,很少語言提供這種支持。
技術(shù)上來講,閉包指值而不是指函數(shù),函數(shù)僅僅是閉包的一個(gè)原型聲明
這個(gè)是我在網(wǎng)上找的一個(gè)關(guān)于閉包的例子,個(gè)人感覺水平有限.可能使用網(wǎng)上的例子更有說服力
這個(gè)例子主要說明的是在外部函數(shù)和內(nèi)部函數(shù)之見參數(shù)的使用,函數(shù)中就可以直接用變量進(jìn)行傳值,這里需要說明一下的是table.sort(存放元素的數(shù)組,排序函數(shù))具體的等后面我介紹常用庫的時(shí)候說.只要知道是表排序就好.
函數(shù)就寫出來的,但是我們需要更直觀的看到這些資料
所以我在最下面加上了如下代碼
print
(
"
---------
"
)
sortbygrade?(names
,
?grades);

for
?v?in?pairs(names)?
do
print
(names[v])
end
輸出結(jié)果為
Mary
Peter
Paul我將grades = {Mary = 7, Paul = 8, Peter = 9}改了再看效果
Peter
Paul
Mary
function?newCounter()

????local?i?=?0

????return?function()?????--?anonymous?function

???????i?=?i?+?1

????????return?i

????end

end

?

c1?=?newCounter()

print(c1())??-->?1

print(c1())??-->?2

print(c1())??-->?3

結(jié)果代碼里已經(jīng)顯示了,我就不說了,但是大家看到這個(gè)結(jié)果?你想到了什么?
對象?就是對象,看以下C#代碼
public?class?CC


{
????private?int?a;

????public?CC()

????
{
???????a=0;
????}

????public?int?newCounter()

????
{
???????this.a=this.a+1;
???????retrun?this.a;
????}
}如果LUA代碼里C1=newCounter();C2=newCounter()
?print(c2())--->1
是不是跟我們聲明一個(gè)對象十分的類似呢?所以我推斷閉包在一定程度上實(shí)現(xiàn)了部分面向?qū)ο蟮墓δ?肯定有一定的差別的,我只是說類似..而且我看代碼有點(diǎn)像C語言去實(shí)現(xiàn)面向?qū)ο蟮母杏X...
閉包還可以實(shí)現(xiàn)類似JAVA里沙箱的功能,(來自網(wǎng)上,我并沒有運(yùn)行這段代碼)
do

????local?oldOpen?=?io.open

????io.open?=?function?(filename,?mode)

???????if?access_OK(filename,?mode)?then

???????????return?oldOpen(filename,?mode)

???????else

???????????return?nil,?"access?denied"

???????end

????end

end

*正確的尾調(diào)用
這個(gè)迷宮游戲是典型的狀態(tài)機(jī),每個(gè)當(dāng)前的房間是一個(gè)狀態(tài)。我們可以對每個(gè)房間寫一個(gè)函數(shù)實(shí)現(xiàn)這個(gè)迷宮游戲,我們使用尾調(diào)用從一個(gè)房間移動(dòng)到另外一個(gè)房間。一個(gè)四個(gè)房間的迷宮代碼如下:

function?room1?()

????local?move?=?io.read()

????if?move?==?"south"?then

???????return?room3()

????elseif?move?==?"east"?then

???????return?room2()

????else

???????print("invalid?move")

???????return?room1()???--?stay?in?the?same?room

????end

end

?

function?room2?()

????local?move?=?io.read()

????if?move?==?"south"?then

???????return?room4()

????elseif?move?==?"west"?then

???????return?room1()

????else

???????print("invalid?move")

???????return?room2()

????end

end

?

function?room3?()

????local?move?=?io.read()

????if?move?==?"north"?then

???????return?room1()

????elseif?move?==?"east"?then

???????return?room4()

????else

???????print("invalid?move")

???????return?room3()

????end

end

?

function?room4?()

????print("congratilations!")

end

我們可以調(diào)用room1()開始這個(gè)游戲。

如果沒有正確的尾調(diào)用,每次移動(dòng)都要?jiǎng)?chuàng)建一個(gè)棧,多次移動(dòng)后可能導(dǎo)致棧溢出。但正確的尾調(diào)用可以無限制的尾調(diào)用,因?yàn)槊看挝舱{(diào)用只是一個(gè)goto到另外一個(gè)函數(shù)并不是傳統(tǒng)的函數(shù)調(diào)用

(以上代碼來源網(wǎng)上)
正確尾調(diào)用論述的意義在于..棧溢出的問題,不正確的尾調(diào)用是存在棧溢出問題的.
這篇寫的我自己都不是很滿意...因?yàn)檫@個(gè)東西..需要點(diǎn)時(shí)間消化...等我消化了再來整理一下,就好象開頭,我也是一個(gè)LUA新手,我只能把我認(rèn)識(shí)的弄出來,而且正確上..也非絕對..其實(shí)我的目的只是傳播我的學(xué)習(xí)的思想.
明鏡臺(tái)
posted @
2009-05-14 13:14 ^喬喬^ 閱讀(2087) |
評論 (0) |
編輯 收藏