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

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

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

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

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

     

    數據庫方面:

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

    詳細例子:

    Public class User{

    Private Integer state;

    Public Integer getState(){

    Return state;

    }

    }

          

    action層調用時:

    User user = new User();

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

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

    }

     

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

    例子:

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

    程序實現有兩種方式解決這種冗余數據:

    ü         修改bname字段的時候就相應的把ac表的name字段也修改掉

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

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

    4、  Tinyint類型的數據,應該說明每種類型的用途,例如: 1:刪除 2:未刪除。

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

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

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

    代碼方面:

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

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

    3、  業(yè)務層之間調用應該使用service,而不是去直接調用dao層。

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

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

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

    Public void deleteById(int id){

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

    userDao. executeUpdate(sql);

    }

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

    Public int deleteById(int id){

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

    Return userDao. executeUpdate(sql);

    }

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

    另外一種改進方法:

    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層調用這個方法后就一定要捕獲DeleteException異常,那么反饋給客戶的結果也是正確的。

     

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

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

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

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

    僅列出標題
    共3頁: 上一頁 1 2 3 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    收藏夾

    linux

    產品交互

    分析,設計,架構

    安全

    技術牛人

    數據庫

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲毛片无码专区亚洲乱| MM131亚洲国产美女久久| 亚洲第一页在线视频| 久久黄色免费网站| 老色鬼久久亚洲AV综合| 一级毛片全部免费播放| 亚洲色av性色在线观无码| 亚洲免费在线观看视频| 亚洲一区二区三区亚瑟| 成人av免费电影| 最新亚洲人成网站在线观看 | 亚洲av不卡一区二区三区| 中文字幕免费观看视频| 亚洲日韩区在线电影| 免费视频爱爱太爽了| 亚洲精品无码久久久久久| 免费一级毛片女人图片| 成人免费一区二区三区| 久久久久久亚洲精品成人| 成人黄动漫画免费网站视频| 亚洲AV无码一区二区三区电影| 国产精品亚洲二区在线观看 | 91制片厂制作传媒免费版樱花| 亚洲婷婷第一狠人综合精品| 国产三级免费电影| 成人无码区免费A∨直播| 亚洲手机中文字幕| 国产一级做a爱免费视频| 最近更新免费中文字幕大全| 亚洲综合激情视频| 国产小视频在线观看免费| 国产在线观看无码免费视频| 亚洲欧洲国产成人精品| 免费日韩在线视频| 国产精品免费看久久久| 亚洲精品无码日韩国产不卡av| 亚洲国产精品久久久天堂| 毛片免费视频在线观看| 9久热精品免费观看视频| 亚洲午夜电影在线观看高清| 亚洲国产精品13p|