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