給JAVA設計開發新手的一些建議和意見(3)
給JAVA設計開發新手的一些建議和意見(3)[@more@] 【空介面的使用】
在介面使用的時候,空介面有2種情況:
1。類似Cloneable,Serializable,他們往往是做一個標記,表示需要某個功能。當然你也可以這麼用,來表示你的類具有某個功能,實現了你的某個介面。
2。你的介面繼承了別的介面(非空),你的介面本身沒有宣告函式。這種情況一般是你不希望使用者使用父介面來作為引數型別,因為他們的用途可能不同,此時就可以用空介面來實現。
第一種情況我們不再多說,搜尋一下關於Cloneable,Serializable的文章就會了解很多。
我們來看下面的程式碼:
public interface Text
{
String getText();
}
public interface SqlText extends Text
{
}
可以看到,Text介面是用於返回一個字串。而SqlText是一個空介面,它繼承了Text介面。也就是說SqlText也是一種Text。但是我們可以知道,任何一個字串不一定是Sql字串,所以此時宣告瞭一個SqlText介面來用於表名當前的字串是一個Sql字串。你的函式可以這樣宣告:
public void doQuery(SqlText aSqlText)
而不是這樣
public void doQuery(Text aText)
避免使用者產生歧義的想法,一眼看去,就明白應該傳入一個Sql字串。
【繼承層次過多】
一般來說,繼承的層次不要過多,否則使用者可能會討厭,找一個函式會很麻煩。很多Java語言檢查工具都建議你的繼承層次不要超過3層。
【Has A ,Is A,不要濫用繼承】
"我是一個Mp3","我有一個Mp3",其實很容易分辨。但是在實際應用中,往往存在把"我有一個Mp3"的情況當作"我是一個Mp3",或者是為了偷懶方便而放鬆了對自己的要求,甚至還沾沾自喜,感覺找到一個捷徑。(scud以前也幹過這種事情)。
以前我曾經這樣幹過:我的邏輯類直接繼承了我的資料庫訪問類,這樣我可以直接在邏輯類裡面訪問:
public MyLogic extends MyDBA
aLogic。getInt("click");
aLogic。getString("name");
看起來是非常方便,但是你的邏輯類就牢牢綁在了DBA上,是一種非常不好的做法。現在我這樣宣告:
public MyLogic
MyDBA adba;
adba。getInt("click");
adba。getString("name");
其實程式碼改動不大,但是你的邏輯類不在牢牢綁在DBA身上了,何樂而不為。
其實這種現象在開發人員中間可能經常見到,我們要儘量避免。下面再來看一個例子:
//一個儲存分頁資訊的類
public class PageInfo
{
private int page;
private int pageCount;
private int recPerPage;
private int recCount;
//get,set method list。。。
}
一般的情況是,在Dao中進行分頁查詢,計算總記錄,總頁數等等,所以需要把PageInfo傳給Dao。而在邏輯類中,把傳回來的分頁資訊資料推到FormBean或者是Action中。
也許你會這麼想,如果我的Action或者FormBean繼承了PageInfo,豈不是要省很多事。
千萬別這麼幹。並不是所有的動作都需要分頁資訊,你的FormBean和PageInfo沒有繼承的關係。也就是說FormBean Has A PageInfo,但是不是Is A PageInfo。
在介面使用的時候,空介面有2種情況:
1。類似Cloneable,Serializable,他們往往是做一個標記,表示需要某個功能。當然你也可以這麼用,來表示你的類具有某個功能,實現了你的某個介面。
2。你的介面繼承了別的介面(非空),你的介面本身沒有宣告函式。這種情況一般是你不希望使用者使用父介面來作為引數型別,因為他們的用途可能不同,此時就可以用空介面來實現。
第一種情況我們不再多說,搜尋一下關於Cloneable,Serializable的文章就會了解很多。
我們來看下面的程式碼:
public interface Text
{
String getText();
}
public interface SqlText extends Text
{
}
可以看到,Text介面是用於返回一個字串。而SqlText是一個空介面,它繼承了Text介面。也就是說SqlText也是一種Text。但是我們可以知道,任何一個字串不一定是Sql字串,所以此時宣告瞭一個SqlText介面來用於表名當前的字串是一個Sql字串。你的函式可以這樣宣告:
public void doQuery(SqlText aSqlText)
而不是這樣
public void doQuery(Text aText)
避免使用者產生歧義的想法,一眼看去,就明白應該傳入一個Sql字串。
【繼承層次過多】
一般來說,繼承的層次不要過多,否則使用者可能會討厭,找一個函式會很麻煩。很多Java語言檢查工具都建議你的繼承層次不要超過3層。
【Has A ,Is A,不要濫用繼承】
"我是一個Mp3","我有一個Mp3",其實很容易分辨。但是在實際應用中,往往存在把"我有一個Mp3"的情況當作"我是一個Mp3",或者是為了偷懶方便而放鬆了對自己的要求,甚至還沾沾自喜,感覺找到一個捷徑。(scud以前也幹過這種事情)。
以前我曾經這樣幹過:我的邏輯類直接繼承了我的資料庫訪問類,這樣我可以直接在邏輯類裡面訪問:
public MyLogic extends MyDBA
aLogic。getInt("click");
aLogic。getString("name");
看起來是非常方便,但是你的邏輯類就牢牢綁在了DBA上,是一種非常不好的做法。現在我這樣宣告:
public MyLogic
MyDBA adba;
adba。getInt("click");
adba。getString("name");
其實程式碼改動不大,但是你的邏輯類不在牢牢綁在DBA身上了,何樂而不為。
其實這種現象在開發人員中間可能經常見到,我們要儘量避免。下面再來看一個例子:
//一個儲存分頁資訊的類
public class PageInfo
{
private int page;
private int pageCount;
private int recPerPage;
private int recCount;
//get,set method list。。。
}
一般的情況是,在Dao中進行分頁查詢,計算總記錄,總頁數等等,所以需要把PageInfo傳給Dao。而在邏輯類中,把傳回來的分頁資訊資料推到FormBean或者是Action中。
也許你會這麼想,如果我的Action或者FormBean繼承了PageInfo,豈不是要省很多事。
千萬別這麼幹。並不是所有的動作都需要分頁資訊,你的FormBean和PageInfo沒有繼承的關係。也就是說FormBean Has A PageInfo,但是不是Is A PageInfo。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10901326/viewspace-965649/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 1024 寫給程式設計師的一些建議程式設計師
- 程式設計師也要養生,給DBA和IT同行的一些建議程式設計師
- 給新手學習MySQL的建議MySql
- Linux新手如何入門?給新手的四點建議!Linux
- 給PHP開發者的建議PHP
- #給java程式設計師的10條建議,吐血推薦!Java程式設計師
- 給國內獨立遊戲開發者的一些建議遊戲開發
- 一些Java開發人員在程式設計中常見的雷!Java程式設計
- 給迷茫的JAVA程式設計師一些中肯建議, 你還在虛度光陰嗎?Java程式設計師
- 7 個給新手 Java 開發者的提示Java
- 給新手 Java 開發者的 7 點提示Java
- 如何高效學習Java?本文給你一些建議!Java
- 給好學進取的開發者的一些建議(自學故事)
- 新手如何學習網頁設計?自我建議網頁
- 學習Java程式設計的建議Java程式設計
- 給Linux系統運維新手的四點建議Linux運維
- 給服務端小白的一些建議服務端
- 怎樣為遊戲設計新手教程?海外開發者分享了6點建議遊戲設計
- 新手錦囊:Web前端開發小白的學習建議和路線圖Web前端
- 給程式設計師“菜鳥”的6條建議程式設計師
- 如何自學程式設計及Java、上手真實開發及轉行程式設計師的建議Java行程程式設計師
- 我的wepy初始化模板和一個指南,歡迎提建議和意見
- 給初學者一些學習Python的建議Python
- 給Java開發初學者的10個學習建議,助你學習事半功倍!Java
- 給Java開發初學者的10個學習建議,助你學習事半功倍Java
- 聊聊程式設計師的職場“圍城”,給出作為過來人的一些建議程式設計師
- 《原神》——開放世界二次元遊戲的一些見解和建議二次元遊戲
- [20210113]給PB開發人員的一個建議.txt
- 給各位PHP程式設計師十點未來的建議PHP程式設計師
- 給迷茫的Java員一些中肯建議,你還在虛度光陰嗎?Java
- 給0基礎入門Linux運維新手的五個建議!Linux運維
- Java開發人員在程式設計中常見的雷!Java程式設計
- 給技術人員一些技術以外的建議
- 一個牛人給Java初學者的建議Java
- 淺談高併發和設計的一些原則(JAVA)Java
- 戰神系列戰鬥設計師:給遊戲設計師的 50 條建議遊戲設計師
- 給遊戲關卡設計的建議,如何用好引擎工具遊戲
- 程式設計漫談(二十):如何自學程式設計及Java、上手真實開發及轉行程式設計師的建議Java行程程式設計師
- 給開發人員的幾點建議:如何理解你的DBATHBAT