實(shí)際開(kāi)發(fā)中,哪些代碼是屬于面向過(guò)程的,需要注意的:
成都創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比城中網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式城中網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋城中地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴(lài)。濫用getter、setter方法:有時(shí)候,開(kāi)發(fā)完一個(gè)類(lèi)之后,有些人就會(huì)順手把getter、setter方法定義上,不管有沒(méi)有用到,實(shí)際上這是面向過(guò)程的編碼風(fēng)格,因?yàn)樗`背了面向?qū)ο缶幊痰姆庋b特性,封裝的意義是為了通過(guò)訪問(wèn)權(quán)限控制,隱藏內(nèi)部數(shù)據(jù),外部?jī)H僅能通過(guò)類(lèi)提供的有限的接口訪問(wèn)、修改內(nèi)部數(shù)據(jù)。所以,隨意的暴露setter、getter方法,違反了封裝特性,數(shù)據(jù)沒(méi)有訪問(wèn)權(quán)限控制,任何代碼都能夠隨意修改它,代碼就退化成了面向過(guò)程編程風(fēng)格了。
濫用全局變量和全局方法
開(kāi)發(fā)項(xiàng)目中常見(jiàn)的全局變量包括
單例類(lèi)對(duì)象:?jiǎn)卫?lèi)對(duì)象在全局代碼中只有一份,所以相當(dāng)于一個(gè)全局變量
靜態(tài)成員變量(比如說(shuō)類(lèi)變量):被所有實(shí)例化對(duì)象共享,也相當(dāng)于一定程度上的全局變量
常量:一種非常常見(jiàn)的全局變量,比如說(shuō)一些代碼中的配置參數(shù),一般都是設(shè)置為常量,放到一個(gè)Constants類(lèi)中
靜態(tài)方法:靜態(tài)方法一般用來(lái)操作靜態(tài)變量(比如說(shuō)將類(lèi)變量傳進(jìn)去拼接)或者外部數(shù)據(jù)(將外部的變量傳進(jìn)去做拼接),這里靜態(tài)方法將方法與數(shù)據(jù)分離,數(shù)據(jù)是傳進(jìn)去的或者有可能從別的地方獲取,破壞了面向?qū)ο蟮姆庋b性,是典型的面向過(guò)程風(fēng)格
常量類(lèi)Constants類(lèi)中,怎么違背了面向?qū)ο?/p>
一般來(lái)說(shuō),在開(kāi)發(fā)的項(xiàng)目中,程序中會(huì)把所有用到的常量都集中地放到這個(gè)Constants類(lèi)中。不過(guò),定義一個(gè)如此大而全的Constants類(lèi),實(shí)際上不是一種好的設(shè)計(jì)思路
會(huì)影響代碼的可維護(hù)性:因?yàn)殚_(kāi)發(fā)過(guò)程中,可能很多地方都要設(shè)計(jì)到這個(gè)類(lèi),隨著項(xiàng)目的開(kāi)發(fā),這個(gè)類(lèi)會(huì)變得臃腫,這樣子,有時(shí)候查找或者修改某個(gè)常量也會(huì)變得比較費(fèi)時(shí),還會(huì)增加提交代碼的沖突概率
會(huì)增加代碼的編譯時(shí)間:隨著項(xiàng)目開(kāi)發(fā),依賴(lài)這個(gè)類(lèi)的代碼會(huì)很多。每次修改Constants類(lèi),都會(huì)導(dǎo)致依賴(lài)它的類(lèi)文件重新編譯,會(huì)費(fèi)時(shí)間
會(huì)影響代碼的復(fù)用性:有時(shí)候,我們?cè)诹硪粋€(gè)項(xiàng)目中,需要復(fù)用本項(xiàng)目的一個(gè)類(lèi),而這個(gè)類(lèi)又依賴(lài)Constants類(lèi)。即便這個(gè)類(lèi)只依賴(lài)Constants類(lèi)中的一小部分常量,也需要將這個(gè)類(lèi)都引入另一個(gè)項(xiàng)目,很多其實(shí)都是用不到的
Constants正確設(shè)計(jì)思路
將Constants類(lèi)拆解為功能更加單一的多個(gè)類(lèi),比如說(shuō)跟Mysql配置相關(guān)的常量,放到MysqlConstants類(lèi)中;跟redis配置相關(guān)的常量,放到RedisConstants類(lèi)中。當(dāng)然,其實(shí)更好的思路是,并不單獨(dú)設(shè)計(jì)Constants常量類(lèi),而是哪個(gè)類(lèi)用到了某個(gè)常量,就把這個(gè)常量定義到這個(gè)類(lèi)中。比如說(shuō),RedisConfigs類(lèi)用到了Redis配置相關(guān)的常量,就直接將這些常量定義在RedisConfig中,這樣也提高了類(lèi)的內(nèi)聚性和代碼的復(fù)用性
Untils類(lèi)往往只包含靜態(tài)方法不包含任何屬性,是徹徹底底面向過(guò)程的編程風(fēng)格,那是否就要杜絕呢?
實(shí)際上,Utils類(lèi)在項(xiàng)目中還是很實(shí)用的,當(dāng)我們定義Utils類(lèi)時(shí)候,要思考是否可以把這個(gè)類(lèi)的某個(gè)方法定義到其它類(lèi)中,如果不行的話就定義,另外,在設(shè)計(jì)Untils類(lèi)的時(shí)候,最好也細(xì)化一下,針對(duì)不同的功能,設(shè)計(jì)不同的Untils類(lèi),比如說(shuō)FileUtils、IOUtils、StringUtils等,不要設(shè)計(jì)一個(gè)大而全的Utils類(lèi)。
定義數(shù)據(jù)跟方法分離的類(lèi)是面向過(guò)程的風(fēng)格,但是常用的web開(kāi)發(fā)模式就是這樣的,這種叫做基于貧血模型的開(kāi)發(fā)模式,后面再展開(kāi)來(lái)講
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧