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