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

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

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

    Johnny's Collections

    生活總是有太多的無奈與失望,讓我們以在努力學(xué)習(xí)和工作中獲得的成就感和快樂來沖淡它們。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      10 Posts :: 0 Stories :: 80 Comments :: 0 Trackbacks

    最近在項目中接到一個任務(wù),我負責(zé)后臺開發(fā),另一開發(fā)人員負責(zé)前臺開發(fā)。任務(wù)非常簡單,請看下面的類圖。



    A和B有一個單向的關(guān)聯(lián)關(guān)系,現(xiàn)在要為A增加一個屬性boolean resident,該屬性值有如下簡單的業(yè)務(wù)邏輯決定(偽代碼):

    if(a.x == a.b.x)
       resident = true;
    else
       resident = false;

    前臺的查看頁面需要顯示這個值,當(dāng)用戶修改a.x或者a.b.x時,要觸發(fā)一個事件,實時的在前臺更新resident,后臺需要以這個resident來

    做某些業(yè)務(wù)邏輯的判斷。

    我們知道,由于resident完全可以由a.x與a.b.x決定,屬于一個冗余數(shù)據(jù),不需要顯式的增加該屬性。很快,前臺的那位開發(fā)人員就輕松的

    告訴我,這個任務(wù)已經(jīng)寫完了,原來他是在頁面寫了一個JS腳本,當(dāng)a.x或a.b.x發(fā)生改變時,觸發(fā)一個onChange()事件,里面就實現(xiàn)了上述

    的邏輯。我一看,感覺問題來了,然后我告訴他,我已經(jīng)在后臺的服務(wù)提供了一個方法,用于判斷resident的值,他應(yīng)該在事件觸發(fā)的時候

    ,通過異步方式調(diào)用后臺方法來獲取reisdent的值。他一聽覺得非常奇怪,這么簡單的邏輯,為什么需要使用異步方式去調(diào)用后臺這么麻煩

    ,于是我就從設(shè)計的角度跟他解釋,resident由 a.x與a.b.x決定,這是一個業(yè)務(wù)邏輯,從職責(zé)劃分的設(shè)計原則分析,前臺只負責(zé)顯示邏輯,

    業(yè)務(wù)邏輯屬于后臺的職責(zé)。接著,他又提出了疑問,說這里其實只有一行代碼,沒有必要分得那么清,這樣調(diào)用不但麻煩,而且性能相對較

    低。

    這個例子,反映出了很多開發(fā)人員的通病,沒有真正從事物的本質(zhì)考慮問題,只從代碼的數(shù)量去考慮。

    上述的做法存在兩個問題:

    1.開發(fā)人員沒有從職責(zé)劃分的角度考慮問題,而只是貪圖一時的方便,或者覺得簡單的一兩行代碼不需要進行設(shè)計,但實際上,上面的問題

    必然導(dǎo)致重復(fù)代碼。上面的例子,即使只有一行代碼,但在系統(tǒng)的前后臺卻出現(xiàn)了兩份相同的邏輯,假設(shè)以后某天業(yè)務(wù)邏輯發(fā)生了變化,那

    么,必須在兩個地方(甚至更多的地方)進行修改、測試,如果漏掉了一個地方,就會導(dǎo)致Bug的出現(xiàn)。作為一個開發(fā)人員,如果不注意這些

    細節(jié),隨意的拷貝和重復(fù)代碼,長期下來,一個系統(tǒng)就會遍布無數(shù)的重復(fù)代碼,系統(tǒng)越往后期就越難維護,最終陷于崩潰。

    2.如果作為后臺開發(fā)人員,看到前臺已經(jīng)實現(xiàn)了這個邏輯,而在前臺往后臺傳遞數(shù)據(jù)的時候,把resident也傳遞進來,從而認為后臺就不需

    要重復(fù)這段邏輯,直接拿著前臺傳過來的這個resident來進行業(yè)務(wù)判斷,那么就可能會給系統(tǒng)帶來致命的漏洞,因為數(shù)據(jù)在傳輸過程中,很

    可能被有意或無意的修改,不在后臺進行業(yè)務(wù)規(guī)則校驗這個錯誤是常見的,但也是致命的。


    有一個原則開發(fā)人員特別容易犯,也一定要切記:

    在Web應(yīng)用中,相信客戶端提交的數(shù)據(jù)是正確的,不在業(yè)務(wù)層進行校驗,這是致命的錯誤。

    筆者會在下一篇博文中,詳細說明某國內(nèi)著名的第三方支付平臺,因為犯了這個低級的錯誤,而導(dǎo)致系統(tǒng)出現(xiàn)致命的漏洞,敬請關(guān)注。
    posted on 2010-04-27 21:43 Johnny.Liang 閱讀(4506) 評論(9)  編輯  收藏 所屬分類: 系統(tǒng)設(shè)計

    Feedback

    # re: 一個非常簡單的例子,反映了很多開發(fā)人員的通病 2010-04-28 04:08 問樓上的人
    我覺得這是此消彼長的,一切照搬設(shè)計原則,設(shè)計出來的系統(tǒng)并不是最完美的,就像設(shè)計數(shù)據(jù)庫,最高范式的并不是最好的。他那樣做有一個好處就是減少一次向服務(wù)端發(fā)送請求,這樣減輕服務(wù)端壓力。1000個這樣的并發(fā)就可以看出他的性能了。所以在設(shè)計上,個人覺得允許一些耦合是必要的  回復(fù)  更多評論
      

    # re: 一個非常簡單的例子,反映了很多開發(fā)人員的通病 2010-04-28 09:07 Johnny.Liang
    @問樓上的人
    我非常同意你的看法,設(shè)計是需求權(quán)衡的,設(shè)計是一種選擇,我寫這篇博文是發(fā)現(xiàn)很多開發(fā)人員沒有這種思想,并不是一刀切的要求都必須按設(shè)計方式生搬硬套。謝謝你的意見。  回復(fù)  更多評論
      

    # re: 一個非常簡單的例子,反映了很多開發(fā)人員的通病 2010-04-28 11:54 grass
    up.up.up.  回復(fù)  更多評論
      

    # re: 一個非常簡單的例子,反映了很多開發(fā)人員的通病[未登錄] 2010-04-29 10:30 wpskl
    我認為前后臺驗證都是必須的,尤其后臺驗證最為重要。我一般都是前后臺都驗證的。  回復(fù)  更多評論
      

    # re: 一個非常簡單的例子,反映了很多開發(fā)人員的通病 2010-04-29 10:42 Johnny.Liang
    @wpskl
    前臺驗證主要看需求和用戶體驗,如果希望用戶填寫信息時出現(xiàn)錯誤馬上得到提醒,就需要做前臺校驗,不過現(xiàn)在的軟件強調(diào)以用戶為中心(UCD)所以你的做法我是贊同的。  回復(fù)  更多評論
      

    # re: 一個非常簡單的例子,反映了很多開發(fā)人員的通病 2010-04-30 16:37 sample
    問題的根結(jié)是,對于開發(fā)人員,應(yīng)該按照功能模塊劃分開發(fā)任務(wù),而不是以程序模塊劃分  回復(fù)  更多評論
      

    # re: 一個非常簡單的例子,反映了很多開發(fā)人員的通病 2010-05-01 02:03 leekiang
    做后端驗證不是浪費時間、增加成本嗎,在國內(nèi)是可以不做的。  回復(fù)  更多評論
      

    # re: 一個非常簡單的例子,反映了很多開發(fā)人員的通病 2010-05-05 22:04 webclerk
    @leekiang
    Web項目不做后臺校驗的話,就好比一車不帶手剎一樣,你敢開嗎?  回復(fù)  更多評論
      

    # re: 一個非常簡單的例子,反映了很多開發(fā)人員的通病 2011-01-01 22:25 wms
    其實博主的思想是好的,可是這個例子并不好,并且在此例子中的實現(xiàn)也并不是非常好的。web開發(fā)的復(fù)雜經(jīng)常體現(xiàn)在這個方面,很多邏輯需要在服務(wù)器端與客戶端重復(fù),并且經(jīng)常是由于客戶體驗和性能導(dǎo)致的,因此采用其他更通用的方法,比如代碼自動生成等方式可能會更好  回復(fù)  更多評論
      

    主站蜘蛛池模板: 亚洲高清无码在线观看| 亚洲精品无码久久不卡| 美女羞羞视频免费网站 | 久久久亚洲精品蜜桃臀| 国产va在线观看免费| 亚洲精品乱码久久久久久蜜桃图片| 亚洲AV成人潮喷综合网| 无码国产精品一区二区免费16| 亚洲综合成人婷婷五月网址| 一本久久a久久精品亚洲| 亚洲精品动漫免费二区| 好吊色永久免费视频大全| 亚洲综合在线成人一区| 亚洲精品视频免费观看| 很黄很色很刺激的视频免费| 一个人看的在线免费视频| 亚洲国产精品综合久久20| 亚洲精品乱码久久久久久按摩 | 亚洲日韩乱码中文字幕| 亚洲成A人片777777| 日本一道一区二区免费看| 国产va在线观看免费| 人妻免费久久久久久久了| 亚洲一级视频在线观看| 亚洲成A人片777777| 亚洲国产中文v高清在线观看| 99re热免费精品视频观看| 国产一精品一av一免费爽爽| 美女羞羞视频免费网站| 亚洲综合成人婷婷五月网址| 97亚洲熟妇自偷自拍另类图片 | 亚洲av日韩综合一区久热| 亚洲综合区图片小说区| 亚洲熟妇中文字幕五十中出| 国产大片51精品免费观看| 99爱在线精品免费观看| 性色午夜视频免费男人的天堂| a毛片成人免费全部播放| 美女视频黄.免费网址| 亚洲爆乳成av人在线视菜奈实| 亚洲国产成人久久三区|