• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            COOOOOOOOL

            從固有的原則出發(fā),向著目標誠直前進.所以這樣的行為便名為正當?shù)男袨?表示其為尋著正路而行的.

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              26 Posts :: 0 Stories :: 21 Comments :: 0 Trackbacks

            公告

            QQ:774262464 email:cooooooool.2010@gmail.com

            常用鏈接

            留言簿(3)

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 72481
            • 排名 - 322

            最新評論

            閱讀排行榜

            評論排行榜

            有時,重復(fù)來自設(shè)計中的錯誤。

            讓我們看一個來自配送行業(yè)的例子。假定我們的分析揭示,一輛卡車有車型、牌照號、司機及其他一些屬性。與此類似,發(fā)運路線的屬性包括路線、卡車和司機?;谶@一理解,我們編寫了一些類。

            但如果Sally打電話請病假、我們必須改換司機,事情又會怎樣呢?Truck和DeliverRoute都包含有司機。我們改變哪一個?顯然這樣 的重復(fù)很糟糕。根據(jù)底層的商業(yè)模型對其進行規(guī)范化(normalize)--卡車的底層屬性集真的應(yīng)包含司機?路線呢?又或許我們需要第三種對象,把司 機、卡車及路線結(jié)合在一起。不管最終的解決方案是什么,我們都應(yīng)避免這種不規(guī)范的數(shù)據(jù)。

            當我們擁有多個互相依賴的數(shù)據(jù)元素時,會出現(xiàn)一種不那么顯而易見的不規(guī)范數(shù)據(jù)。讓我們看一個表示線段的類:

            1. class Line {  
            2.  public:  
            3.   Point  start;  
            4.   Point  end;  
            5.   double length;  
            6. }; 

            第一眼看上去,這個類似乎是合理的。線段顯然有起點和終點,并總是有長度(即使長度為零)。但這里有重復(fù)。長度是由起點和終點決定的:改變其中一個,長度就會變化。最好是讓長度成為計算字段:

            1. class Line {  
            2.   public:  
            3.    Point  start;  
            4.    Point  end;  
            5.    double length() { return start.distanceTo(end); }  
            6.  }; 

            在以后的開發(fā)過程中,你可以因為性能原因而選擇違反DRY原則。這經(jīng)常會發(fā)生在你需要緩存數(shù)據(jù),以避免重復(fù)昂貴的操作時。其訣竅是使影響局部化。對DRY原則的違反沒有暴露給外界:只有類中的方法需要注意"保持行為良好"。

            1. class Line {  
            2.  private:  
            3.   bool  changed;  
            4.   double length;  
            5.   Point  start;  
            6.   Point  end;  
            7.  
            8.  public:  
            9.   void setStart(Point p) { start = p; changed = true; }  
            10.   void setEnd(Point p)   { end   = p; changed = true; }  
            11.  
            12.   Point getStart(void)   { return start; }  
            13.   Point getEnd(void)     { return end;   }  
            14.  
            15.   double getLength() {  
            16.     if (changed) {  
            17.       length  = start.distanceTo(end);  
            18.       changed = false;  
            19.     }  
            20.     return length;  
            21.   }  
            22. }; 

            這個例子還說明了像Java和C++這樣的面向?qū)ο笳Z言的一個重要問題。在可能的情況下,應(yīng)該總是用訪問器(accessor)函數(shù)讀寫對象的屬性 。這將使未來增加功能(比如緩存)變得更容易。

            Uniform Access原則:模塊提供的所有服務(wù)都應(yīng)能通過統(tǒng)一的表示法使用,該表示法不能泄漏它們是通過存儲、還是通過計算實現(xiàn)的。

            posted on 2009-12-16 15:53 COOOOOOOOL 閱讀(145) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲香蕉网久久综合影视| 久久国产福利免费| 嫩草影院久久99| 伊人久久大香线蕉AV一区二区| 伊人久久大香线蕉综合5g| 久久久一本精品99久久精品88| 国产精品免费看久久久香蕉| 亚洲中文字幕伊人久久无码 | 久久久无码精品亚洲日韩按摩| 狠狠色噜噜狠狠狠狠狠色综合久久| 99国内精品久久久久久久| 久久无码人妻一区二区三区| 欧美精品丝袜久久久中文字幕| 久久久久99精品成人片直播| 深夜久久AAAAA级毛片免费看 | 久久夜色精品国产| 国产午夜免费高清久久影院| 伊人色综合久久天天网 | 久久久久亚洲精品天堂| 一级A毛片免费观看久久精品| 欧美777精品久久久久网| 色婷婷综合久久久久中文| 综合久久一区二区三区 | 久久精品中文字幕无码绿巨人 | 久久久久久久综合日本亚洲| 久久伊人五月丁香狠狠色| 久久人人爽人人精品视频| 好属妞这里只有精品久久| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲国产视频久久| 久久婷婷五月综合97色直播| 午夜精品久久久内射近拍高清| 久久精品国产福利国产琪琪 | 久久综合综合久久综合| 偷窥少妇久久久久久久久| 武侠古典久久婷婷狼人伊人| 色综合久久88色综合天天 | 欧美久久久久久午夜精品| 久久精品视屏| 亚洲一区精品伊人久久伊人 | 久久午夜综合久久|