摘要:高內聚低耦合是寫好類的核心思想,抽象單一性能幫助我們寫出低耦合的代碼,那高內聚呢,內聚性會直接表現(xiàn)在我們的代碼維護上,當我們寫出內聚性很強的代碼時,與之關聯(lián)的維護工作也會變得簡單。
「代碼大全」一書談到了抽象數(shù)據(jù)模型(ADT)的概念,以PHP的角度來看,平常最常見的類就是抽象數(shù)據(jù)模型的表現(xiàn)形式,很多人對面向對象編程還處在懵懵懂懂的階段,經常什么方法都塞在一個類中,舉個例子,我們有個字體的類,代碼如下:
這個類中定義了公有的屬性"style",獲取Style的方法和另外一些子方法,本來創(chuàng)建這個類是為了圍繞「字體」作文章的,但在實現(xiàn)過程中,臨時需求的增加使得這個類中多了Div和把字體插入到Div的方法,這是很常見的情況,而這只是個開始,與類無關的代碼會越來越多,就像地上本無垃圾,有人丟了第一塊垃圾,人們就會跟著丟垃圾一樣,最后的結果就是這個類變得不易維護,可讀性減低,導致這樣的原因就是與類無關的代碼破壞了這個類抽象的一致性。
另外這個類的style屬性也有問題,它的類型是public,意味著外部可以隨時調用改寫,然后外部代碼就有了
$font = new Font; $font->style = "font-size: 13px";或者:
$font = new Font; $font->style = "font-weight: both";等等等等,日積月累,某一天,產品走到你面前,微微一笑地對你說:陳工啊,麻煩給每個字體都加上個默認的14px字體大小樣式;
你一臉懵逼帶著生無可戀的表情望著產品(他或者她或者它):……好,請你給我半天或更長的時間來改;
產品:#¥%……&*(&……%#¥%……&*;
你一邊查找替換著代碼,一邊暗罵自己為什么不在Font類中定義個方法來調用style屬性,一邊還總結著經驗告訴自己下次絕不這么傻逼了。程序員總是在一次次的慘痛經驗中進步著,但如果有那么一本好書籍或者好導師,真的會少走很多彎路。(再給代碼大全打個廣告)
第一段我們講到抽象的概念,抽象是什么呢?面向對象中有個原則既單一原則,我理解的抽象跟這個單一原則有著千絲萬縷的關系;單一原則分為類的單一和方法的單一,比如說,人有吃喝拉撒四種行為,他們即有類的單一原則(人),也有方法的單一原則(吃、喝、拉、撒),這里的「人」就是我們抽象出來的東西,如果你往里面加個飛行的行為,就破壞了類的單一原則和抽象性,來驗證下,加入飛行行為之后人就有了「吃、喝、拉、撒、飛行」五個行為,這不是人應該是鳥了。
「高內聚、低耦合」是寫好類的核心思想,抽象(單一性)能幫助我們寫出低耦合的代碼,那高內聚呢,內聚性會直接表現(xiàn)在我們的代碼維護上,當我們寫出內聚性很強的代碼時,與之關聯(lián)的維護工作也會變得簡單。上面的栗子講到這個程序員把style屬性設為public并且在外部代碼中直接修改導致了后面的問題產生;對這些易改變的元素我們應該通過子程序(方法)修改的方式來增強它們的維護性,把所有的變化都控制在類中來增強類的內聚性。
一切理論都是虛的,實踐才是讓自己進步的最佳方法,Talk is cheap. Show me the code。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/30311.html
摘要:但是從客觀上而言,業(yè)務代碼本身由于包含了業(yè)務領域的知識,復雜可以說是先天的屬性。原來業(yè)務代碼也可以這么簡潔而優(yōu)雅。因為此內部業(yè)務框架做的事情很多,篇幅有限,這里僅對最具借鑒意義的領域建模思考作介紹。其實也是很典型的一種業(yè)務代碼編寫方式。 本文主要作為筆者閱讀Eric Evans的《Domain-Driven Design領域驅動設計》一書,同時拜讀了我司大神針對業(yè)務代碼封裝的一套業(yè)務框...
摘要:背景程序員日常工作中最多的應該是接收需求編碼實現(xiàn)需求。內容決定形式,形式依賴于內容,并隨內容的發(fā)展而發(fā)展。我也只做到了圖形搭配階段,配圖就比較麻煩,如果要是能確定關鍵詞也可以,百度搜索即可。具體的網站百度找下就可以了,就不發(fā)地址了。 背景 程序員日常工作中最多的應該是接收需求、編碼實現(xiàn)需求。但也有些時候需要做一些非代碼的文字工作。 比如做述職報告、工作總結等,這些一般的都是通過 ppt...
摘要:背景程序員日常工作中最多的應該是接收需求編碼實現(xiàn)需求。內容決定形式,形式依賴于內容,并隨內容的發(fā)展而發(fā)展。我也只做到了圖形搭配階段,配圖就比較麻煩,如果要是能確定關鍵詞也可以,百度搜索即可。具體的網站百度找下就可以了,就不發(fā)地址了。 背景 程序員日常工作中最多的應該是接收需求、編碼實現(xiàn)需求。但也有些時候需要做一些非代碼的文字工作。 比如做述職報告、工作總結等,這些一般的都是通過 ppt...
閱讀 1022·2021-10-27 14:15
閱讀 2776·2021-10-25 09:45
閱讀 1941·2021-09-02 09:45
閱讀 3367·2019-08-30 15:55
閱讀 1807·2019-08-29 16:05
閱讀 3203·2019-08-28 18:13
閱讀 3117·2019-08-26 13:58
閱讀 455·2019-08-26 12:01