<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    做設(shè)計前期需要注意的細節(jié)

    做設(shè)計前期需要注意的細節(jié)

     

    數(shù)據(jù)庫方面:

    1、  數(shù)據(jù)庫設(shè)計,所有整數(shù)型的字段默認賦值為0(或-1,這個根據(jù)業(yè)務(wù)來就好,不是特別強求),字符型也默認賦值‘’(這個倒可做可不做)。可以避免程序的空指針異常。

    詳細例子:

    Public class User{

    Private Integer state;

    Public Integer getState(){

    Return state;

    }

    }

          

    action層調(diào)用時:

    User user = new User();

    If(user.getState()>1){ 如果數(shù)據(jù)庫沒有賦初始值的話,就會報空指針異常

    //其他業(yè)務(wù)邏輯

    }

     

    2、  把所有冗余字段記錄清楚,下次應(yīng)用程序修改某字段的時候就要把相應(yīng)的冗余字段全部修改過來。可以避免數(shù)據(jù)不一致性。

    例子:

    A表冗余了b表的name字段,c表冗余了b表的name字段。

    程序?qū)崿F(xiàn)有兩種方式解決這種冗余數(shù)據(jù):

    ü         修改bname字段的時候就相應(yīng)的把ac表的name字段也修改掉

    ü         修改bname字段的時候插入到另外一個表中,通過定時器在凌晨的時候進行自動修改

    3、  主外鍵通過數(shù)據(jù)庫文檔描述清楚,數(shù)據(jù)庫不直接建立主外鍵關(guān)系,最主要是考慮到以后數(shù)據(jù)庫擴展,建立了主外鍵的話,水平擴展會非常難。

    4、  Tinyint類型的數(shù)據(jù),應(yīng)該說明每種類型的用途,例如: 1:刪除 2:未刪除。

    5、  某一些初始數(shù)據(jù)前期就應(yīng)該固定好,并且備份好。以免以后弄亂了。比如:城市數(shù)據(jù)都不會變動的數(shù)據(jù)。

    6、  數(shù)據(jù)庫的數(shù)據(jù)主要分為基礎(chǔ)數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù),城市等這些屬于基礎(chǔ)數(shù)據(jù),而會員和會員賬號屬于業(yè)務(wù)數(shù)據(jù),業(yè)務(wù)數(shù)據(jù)在應(yīng)用程序中就需要注意了,添加一個會員數(shù)據(jù)后需要把會員賬號的默認賬號也開起來(當(dāng)然有些業(yè)務(wù)規(guī)則要求賬號可以后期獨立開啟)。

    7、  對于數(shù)據(jù)庫中“刪除”操作的處理,我們不需要將數(shù)據(jù)刪除,只要將狀態(tài)標(biāo)識一下即可,比如用戶可以設(shè)置一個state狀態(tài),1:啟用 2:禁用 3:刪除

    代碼方面:

    1、  統(tǒng)一checkstyle和版權(quán)申明等注釋。

    2、  Action在前期就應(yīng)該用模塊化方法規(guī)定好,同一模塊中公用的部分應(yīng)該用utils文件來進行共享,避免使用繼承,減少程序過于龐大和復(fù)雜化。

    3、  業(yè)務(wù)層之間調(diào)用應(yīng)該使用service,而不是去直接調(diào)用dao層。

    4、  業(yè)務(wù)層的代碼特別是updatedelete的方法不能直接返回void,應(yīng)該給出一個特別的值,或者拋出異常,客戶端才能真正的準(zhǔn)確知道此次操作是否真正成功。

    可能比較模糊,舉一個例子:

    前提條件,業(yè)務(wù)層的代碼如下:

    Public void deleteById(int id){

    String sql = “delete from User where uid=?”;

    userDao. executeUpdate(sql);

    }

    客戶端發(fā)起刪除操作,給了一個數(shù)據(jù)庫不存在的id,而這樣的delete語句是不會報錯的.那么在action層調(diào)用這個方法的時候,action層只要沒有拋出異常,那么action只能認為業(yè)務(wù)層的deleteById方法一定執(zhí)行成功了,實際對于用戶來說是沒有執(zhí)行成功這個操作。用戶體驗非常不好。如何改進呢?

    Public int deleteById(int id){

    String sql = “delete from User where uid=?”;

    Return userDao. executeUpdate(sql);

    }

    Action層調(diào)用這個方法后,判斷返回的int值判斷是否執(zhí)行成功,然后把相應(yīng)的結(jié)果反饋給客戶。

    另外一種改進方法:

    Public void  deleteById(int id) throws new

    DeleteException{

    String sql = “delete from User where uid=?”;

    Int result = userDao. executeUpdate(sql);

    If(result==0){

    Throw new DeleteException(“刪除操作失敗”);

    }

    }

    Action層調(diào)用這個方法后就一定要捕獲DeleteException異常,那么反饋給客戶的結(jié)果也是正確的。

     

    5、  dao層的方法也是類型于上面所講的。

    6、  ajax層的ajax方法調(diào)用也要注意一點:對于都要加上error方法或者failure方法,因為服務(wù)端出問題的時候,有一個很好的提示給用戶,對于用戶體驗來說也是非常好的一種感受。

    7、  業(yè)務(wù)層用例之間的耦合盡量少,但是類似交互規(guī)則這樣的場景存在的話如何處理呢,可以通過業(yè)務(wù)規(guī)則來處理,可以減少耦合。

    posted on 2010-09-25 12:10 yangpingyu 閱讀(194) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    <2010年9月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    收藏夾

    linux

    產(chǎn)品交互

    分析,設(shè)計,架構(gòu)

    安全

    技術(shù)牛人

    數(shù)據(jù)庫

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产成a人v在线观看| 亚洲国产中文在线视频| 一区二区免费在线观看| 亚洲福利精品一区二区三区| 黄色毛片免费在线观看| 亚洲国产成人久久一区久久| 免费国产草莓视频在线观看黄| www亚洲精品少妇裸乳一区二区| 免费的黄网站男人的天堂 | 国产情侣久久久久aⅴ免费| 久久精品国产精品亚洲色婷婷 | 久久国产精品免费一区二区三区| 国产v片免费播放| 国产精品小视频免费无限app| 亚洲日韩中文字幕在线播放| 久久免费国产精品一区二区| 99久久精品国产亚洲| 无码一区二区三区AV免费| 美女黄频a美女大全免费皮| 久久久精品国产亚洲成人满18免费网站| 一级做a爱过程免费视| 亚洲国产精品成人精品无码区在线| 无码人妻丰满熟妇区免费| 亚洲男人的天堂久久精品| 免费在线观看的黄色网址| a级毛片免费观看视频| 亚洲av永久无码精品三区在线4| 午夜时刻免费入口| 91免费国产视频| 亚洲春黄在线观看| 又色又污又黄无遮挡的免费视 | 在线观看免费视频网站色| 亚洲人成在线播放| 亚洲不卡无码av中文字幕| 精品一区二区三区免费毛片爱| 亚洲欧美一区二区三区日产| 亚洲日韩欧洲乱码AV夜夜摸| 国产免费看JIZZ视频| 一级毛片免费在线| 亚洲精品456在线播放| 亚洲国产精品专区在线观看|