學(xué)編程已經(jīng)三四年了,但是一直都沒有寫過相關(guān)的文章。今天,終于憋出一篇來。一來作為總結(jié),二來可以給師弟師妹作為參考。
我讀大一的時(shí)候,老師教會(huì)了我if,while,for,等關(guān)鍵詞之后,我就開始自學(xué)了。大一的時(shí)候教的是C語(yǔ)言,從此之后,我迷上了C語(yǔ)言。因?yàn)镃能實(shí)現(xiàn)我的想法。接下來我自學(xué)了java,jsp。當(dāng)然,自學(xué)走了很多的彎路,直到現(xiàn)在我很后悔。~~~~(>_<)~~~~ 。交了學(xué)費(fèi)不在老師那里學(xué)點(diǎn)東西的人的確很SB。
我現(xiàn)在主要說說我學(xué)java的經(jīng)驗(yàn)。學(xué)東西,要知道學(xué)來做什么嗎?java干什么用呢?當(dāng)然不是生孩子用的,也不是下酒菜。java有兩個(gè)方向,一個(gè)是做網(wǎng)站,另外一個(gè)是做手機(jī)軟件。你選擇那個(gè)方向呢?
我選擇是做網(wǎng)站,雖然我一度鄙視做網(wǎng)站的(但我現(xiàn)在連鄙視的行業(yè)也進(jìn)不去)。但選擇了java,再選別的就沒什么必要,我是這樣想的,肉吃了一半就丟掉嗎?多可惜。
java是完全面向?qū)ο蟮恼Z(yǔ)言,面向?qū)ο笾饕v的是封裝,繼承,多態(tài)。但是老師對(duì)于這些至關(guān)重要的知識(shí)只用了一節(jié)課,我不想說,老師很SB,或者是她不知道如何使用這些特性。我現(xiàn)在告訴讀者,這些特性會(huì)讓你很爽。
我記得,我學(xué)java的時(shí)候,我用swing組件做了一個(gè)同學(xué)錄的軟件。當(dāng)時(shí)的心情是自豪的,現(xiàn)在看里是傻B呼呼。首先,swing已經(jīng)是一門過時(shí)的技術(shù),過時(shí)的東西是被歷史淘汰了,我卻當(dāng)做寶貝。是多么的無知。
我現(xiàn)在分析我那個(gè)軟件。我當(dāng)然寫的同學(xué)錄只有一個(gè)類。一個(gè)主類,類里再套類,看得我頭昏腦脹,改一點(diǎn)就得改好多,然后調(diào)試的時(shí)候就出現(xiàn)好多錯(cuò)誤。遇到這樣的問題誰都頭痛。為什么出現(xiàn)這樣的情況。因?yàn)橹挥幸粋€(gè)類呀,所有的東西都放在一個(gè)類里,不亂才怪。就像一個(gè)籮筐里什么都放,當(dāng)然亂了。這個(gè)時(shí)候,我們應(yīng)該用到封裝來改變代碼的質(zhì)量。
怎么做呢?
首先,界面和業(yè)務(wù)邏輯分開。對(duì)于界面,很多人都知道,但是業(yè)務(wù)邏輯有可能不明白的,我比喻一下。比如,同學(xué)錄。你想看我的同學(xué)錄,你就得知道我的登陸密碼,你輸入密碼的時(shí)候,代碼會(huì)校驗(yàn)密碼,校驗(yàn)密碼就是一個(gè)業(yè)務(wù)邏輯。界面和業(yè)務(wù)邏輯分開有什么好處?起碼,代碼分工分明。這些類負(fù)責(zé)界面,那些類負(fù)責(zé)業(yè)務(wù)邏輯。分工分明是有好處的。避免大家手忙腳亂做錯(cuò)事,還有誰出錯(cuò)了就找誰算賬就行。
這樣的話你的代碼就得這樣寫了
class 界面
{
}
class 業(yè)務(wù)邏輯
{
}
這樣總比
class 界面+業(yè)務(wù)邏輯
{
}
好管理吧。
這樣的話,界面的一些按鈕的位置改變了,對(duì)業(yè)務(wù)邏輯影響不大。這就是書上說的耦合度。
接著說業(yè)務(wù)邏輯。因?yàn)闃I(yè)務(wù)邏輯比較重要。
業(yè)務(wù)邏輯這么寫呢?我以前是這樣寫的,比如說,我想我的同學(xué)了,我想查一下她的電話然后call她。我很懶,不想翻電話部,我就用同學(xué)錄軟件查詢我的同學(xué)錄,那么軟件就得有查詢的功能。代碼是這樣的
class select同學(xué)name
{
}
刪除
class delete同學(xué)
{
}
但是,想用我的同學(xué)錄你得知道密碼,你就輸入密碼。那么我的代碼是
class select密碼
{
}
這樣寫下去,我感覺很無頭緒。這個(gè)時(shí)候就很適合用接口。什么是接口,我當(dāng)時(shí)學(xué)java的時(shí)候,我也在想什么是接口,不就是一個(gè)interface嗎?
基本語(yǔ)法是這樣的
interface 接口名
{
抽象方法1;
抽象方法2;
}
當(dāng)時(shí)我琢磨了很長(zhǎng)時(shí)間,想不到interface怎么個(gè)好用?
現(xiàn)在我明白了。
你查詢密碼,查詢同學(xué)的電話,或者是更新同學(xué)的電話。你就得查詢數(shù)據(jù)庫(kù)吧。對(duì)于數(shù)據(jù)的操作不就是select,delete,update嗎?
那么這樣的話,我們可以這樣寫
public interface DataBase
{
// 增加操作
public void insert(name) throws Exception ;
// 修改操作
public void update(name) throws Exception ;
// 刪除操作
public void delete(String id) throws Exception ;
// 按ID查詢操作
public Person queryById(String id) throws Exception ;
// 查詢?nèi)?br />
public List queryAll() throws Exception ;
// 模糊查詢
public List queryByLike(String guanjianci) throws Exception ;
}
然后你就可以在各個(gè)功能類里implements DataBase了。什么是接口,就是規(guī)定你按照上面的格式去做,有規(guī)定了,就好辦事,對(duì)嗎?這個(gè)最好看看簡(jiǎn)單工廠設(shè)計(jì)模式.
接下來說JSP吧
學(xué)完java就該學(xué)JSP了。我們發(fā)的是電子工業(yè)出版社出版的《JSP動(dòng)態(tài)網(wǎng)頁(yè)編程技術(shù)》第七章說的是JSP操作數(shù)據(jù)庫(kù)。用的是JDBC-ODBC橋,如果堂哥沒有這樣提醒我的話,我現(xiàn)在可能還在配置數(shù)據(jù)源-----java的優(yōu)勢(shì)是跨平臺(tái),你這樣連接數(shù)據(jù)庫(kù)的話,就和操作系統(tǒng)綁定在一起了。于是我在網(wǎng)上查了,用JDBC驅(qū)動(dòng)包。因?yàn)檫@樣的話速度快,如果是配置connection poll(連接池)性能就更加高了,好的東西我們?yōu)槭裁床挥媚兀康诰耪率莝ervlet編程技術(shù),但是老師沒有講,我忘記什么理由了。好像是用得不多。但是在接下來的自學(xué)過程中。我知道servlet用得很多,而且很重要。包括MVC設(shè)計(jì)模式和struts框架。不懂servelet就不懂java。servlet有很多精彩的地方。我這不是教程,所以就不詳細(xì)說servlet的語(yǔ)法。但是servlet的路徑問題得好好研究。對(duì)于servlet就學(xué)會(huì)配置web.xml和獲取,跳轉(zhuǎn)就可以了。
但是你要是有很多servlet的話。你就得配置很多,這樣的話,web.xml的文件就顯得很臃腫,有沒有更高的解決方法?有的。<url-pattern>*.do</url-pattern>,你可以試一下,不管你什么請(qǐng)求,你請(qǐng)求的路徑是什么,只要.do結(jié)尾的都能找到那個(gè)servlet。這就是從多個(gè)名稱映射同一個(gè)servlet。
servlet可以用request.getRequestURL()獲取路徑,然后用字符串截取函數(shù)substring()截取請(qǐng)求后面的路徑。然后根據(jù)請(qǐng)求的路徑跳轉(zhuǎn)到哪個(gè)類。當(dāng)然,跳轉(zhuǎn)到哪個(gè)類,最好的解決方法是在.xml中配置。避免了大量的if語(yǔ)句。而且很靈活。所以,在struts1.x中有個(gè)默認(rèn)的配置文件struts-config.xml配置映射。在struts中,actionServlet就做上面的截取路徑的動(dòng)作。然后由struts-config.xml提供的映射分發(fā)到Action。對(duì)于struts我不易多說,因?yàn)槲椰F(xiàn)在在學(xué)習(xí)。我感覺它是個(gè)好東西。很經(jīng)典,很多設(shè)計(jì)模式都在里面找到。
我愿意和你們一起學(xué)習(xí)struts。