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

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

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

    做設計前期需要注意的細節

    做設計前期需要注意的細節

     

    數據庫方面:

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

    詳細例子:

    Public class User{

    Private Integer state;

    Public Integer getState(){

    Return state;

    }

    }

          

    action層調用時:

    User user = new User();

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

    //其他業務邏輯

    }

     

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

    例子:

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

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

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

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

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

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

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

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

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

    代碼方面:

    1、  統一checkstyle和版權申明等注釋。

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

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

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

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

    前提條件,業務層的代碼如下:

    Public void deleteById(int id){

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

    userDao. executeUpdate(sql);

    }

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

    Public int deleteById(int id){

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

    Return userDao. executeUpdate(sql);

    }

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

    另外一種改進方法:

    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、  業務層用例之間的耦合盡量少,但是類似交互規則這樣的場景存在的話如何處理呢,可以通過業務規則來處理,可以減少耦合。

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


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


    網站導航:
     
    <2010年9月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    導航

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    收藏夾

    linux

    產品交互

    分析,設計,架構

    安全

    技術牛人

    數據庫

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲高清视频免费| 两个人www免费高清视频| 久久精品国产免费观看| 亚洲2022国产成人精品无码区| a级毛片免费完整视频| 好看的电影网站亚洲一区| 久久久受www免费人成| 精品国产亚洲一区二区三区| 九九精品成人免费国产片| 亚洲va在线va天堂va888www| 午夜影院免费观看| 91亚洲精品麻豆| 在线观看免费大黄网站| 国产成人 亚洲欧洲| 亚洲日韩国产成网在线观看| 91免费福利视频| 亚洲视频一区在线| 青青青国产免费一夜七次郎| 伊人久久国产免费观看视频| 亚洲国产另类久久久精品小说 | 久久久久久亚洲精品| 99热这里只有精品免费播放| 91午夜精品亚洲一区二区三区| 成人毛片免费播放| 国产日韩在线视频免费播放| 久久亚洲AV成人无码| 在线成人a毛片免费播放| 一级毛片在线播放免费| 五月天网站亚洲小说| 欧洲精品免费一区二区三区| 成年网站免费入口在线观看 | 一本色道久久88综合亚洲精品高清| 久久WWW免费人成—看片| 久久亚洲日韩看片无码| 日韩人妻无码免费视频一区二区三区| 一级全免费视频播放| 亚洲色偷偷av男人的天堂| 全部免费a级毛片| 久久ww精品w免费人成| 免费大片黄在线观看| 久久精品国产亚洲av影院|