• <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   管理


            狠狠色丁香久久综合婷婷| 日韩精品久久无码人妻中文字幕| 久久久久久亚洲Av无码精品专口| 久久精品aⅴ无码中文字字幕不卡 久久精品成人欧美大片 | 精品乱码久久久久久夜夜嗨 | 伊人久久大香线蕉av不变影院 | 国产激情久久久久影院老熟女| 国内精品久久久久久久久| 久久性生大片免费观看性| 99精品久久精品一区二区| 国产成人精品久久亚洲高清不卡| 人妻少妇精品久久| 国产三级久久久精品麻豆三级| 久久久99精品成人片中文字幕 | av国内精品久久久久影院| 久久国产一片免费观看| 久久国产精品成人片免费| 久久精品中文字幕一区| 国产∨亚洲V天堂无码久久久| 香蕉99久久国产综合精品宅男自 | 久久超碰97人人做人人爱| 久久久久香蕉视频| 91精品婷婷国产综合久久| 午夜精品久久久久久影视777| 国产精品久久亚洲不卡动漫| 香蕉久久永久视频| A级毛片无码久久精品免费| 精品综合久久久久久98| 久久伊人影视| 久久久久久国产精品美女| 久久国产热精品波多野结衣AV| 久久无码一区二区三区少妇 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 一本色道久久综合| 久久久中文字幕日本| yellow中文字幕久久网| 久久久久久久综合日本亚洲| 国产精品国色综合久久| 国产人久久人人人人爽| 久久精品毛片免费观看| 久久婷婷五月综合色高清|