自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

好的代碼組織方式只是為了更好看嗎?

原創(chuàng)
開(kāi)發(fā) 項(xiàng)目管理
話說(shuō)最近作者被派到了一個(gè)活兒,需要使用NetSuite的API來(lái)自動(dòng)將網(wǎng)站的客戶(hù)導(dǎo)入NetSuite系統(tǒng)里管理。NetSuite在CRM系統(tǒng)里也算個(gè)比較知名的大牌了,據(jù)說(shuō)是Oracle傳授的管理經(jīng)驗(yàn),功能也著實(shí)強(qiáng)大。

程序猿隊(duì)伍里面不乏【差不多】先生:代碼寫(xiě)出來(lái)能用就行了;開(kāi)發(fā)環(huán)境能用就行了;上線前隨便測(cè)測(cè)就行了;你要我再給你就行了...這些態(tài)度不僅惱人,而且對(duì)于產(chǎn)品質(zhì)量、團(tuán)隊(duì)協(xié)作來(lái)說(shuō)都是危害甚大,這在初創(chuàng)項(xiàng)目中結(jié)果特別明顯。今天只談代碼,為啥捏?因?yàn)橛袀€(gè)槽它不吐不快?。∽髡咭菜阋?jiàn)過(guò)點(diǎn)世面的了,但是還是被惱到了。

話說(shuō)最近作者被派到了一個(gè)活兒,需要使用NetSuite的API來(lái)自動(dòng)將網(wǎng)站的客戶(hù)導(dǎo)入NetSuite系統(tǒng)里管理。NetSuite在CRM系統(tǒng)里也算個(gè)比較知名的大牌了,據(jù)說(shuō)是Oracle傳授的管理經(jīng)驗(yàn),功能也著實(shí)強(qiáng)大。然后作者就開(kāi)始研究SuiteTalk PHP Toolkit,看了半天的文檔,大概明白了一些業(yè)務(wù)流程做了一些準(zhǔn)備工作,就等著用這API進(jìn)行神圣的***次Web Service交互。洋洋灑灑寫(xiě)下了一些調(diào)試代碼開(kāi)始試驗(yàn)。結(jié)果你能想到,我瘋了。一個(gè)開(kāi)源庫(kù)有3個(gè)文件,一個(gè)config,一個(gè)基礎(chǔ)類(lèi)加工具函數(shù),***一個(gè)就是將近14W行代碼大小2MB多的php文件,幾乎所有的類(lèi)都寫(xiě)在一個(gè)文件里面了。其實(shí)這也還好,不就是看代碼會(huì)費(fèi)事點(diǎn)么。重點(diǎn)是這個(gè):

請(qǐng)注意這個(gè)庫(kù)是沒(méi)有命名空間的,類(lèi)名也沒(méi)有任何的前綴。敢問(wèn)猴兒們做的項(xiàng)目里,有多少個(gè)項(xiàng)目是沒(méi)有個(gè)Customer類(lèi)?引入外部庫(kù)是為了改自家的類(lèi)名么?當(dāng)然了,如果你的項(xiàng)目里本身就引入了命名空間,這個(gè)問(wèn)題影響不大;但是大家手頭在維護(hù)的項(xiàng)目里,大多都有超過(guò)幾年的歷史代碼,也就是有很大幾率是沒(méi)有命名空間的。

后來(lái)作者為了解決這個(gè)命名沖突問(wèn)題找到了一個(gè)樂(lè)于奉獻(xiàn)的程序員,他幫忙把這個(gè)API整理成了命名空間+composer安裝的方式(https://github.com/ryanwinchester/netsuite-php)。缺點(diǎn)就是沒(méi)有實(shí)現(xiàn)Token Based Authentication,也沒(méi)關(guān)系,繼承一下加進(jìn)去。哎,上回說(shuō)到不要隨便用private成員(http://zhuanlan.51cto.com/art/201606/513531.htm),這會(huì)又碰到了,為了順利繼承,不得不把所有的private成員都拷一遍到自己寫(xiě)的繼承類(lèi)里。

作者理解猴兒的成長(zhǎng)需要過(guò)程,需要不斷試錯(cuò)方能練成九陰白骨爪。因?yàn)樽约阂彩沁@么過(guò)來(lái)的,雖然白骨爪還沒(méi)有,豉汁鳳爪倒是有一對(duì)。但是像NetSuite這樣的大品牌弄出這么青澀的庫(kù)還真是很少見(jiàn)。

上面的描述略帶夸張,開(kāi)心呢您就笑一笑。話說(shuō)回來(lái),【差不多】先生和NetSuite都可以來(lái)看看關(guān)于代碼組織方式這件事上,是不是湊合就可以了。這就要說(shuō)到現(xiàn)今流行的幾種方式了,PSR系列(PHP Standards Recomendations)。

[[170536]]

PSR-0在2014年10月21日已經(jīng)被標(biāo)志為淘汰過(guò)時(shí)了,現(xiàn)在推薦的是PSR-4,我們看到composer里面還保留著對(duì)PSR-0的支持。

PSR-0,Autoloading Standard

文件的結(jié)構(gòu)為Vendor\(Namespace)*\ClassName.php;每個(gè)命名空間的最頂層空間一定是Vendor,例如對(duì)于NetSuite來(lái)說(shuō),NetSuite就應(yīng)該是它的最頂層命名空間;中間 可以有無(wú)數(shù)層命名空間;命名空間的分隔符會(huì)在找相應(yīng)類(lèi)文件時(shí)轉(zhuǎn)換為系統(tǒng)的文件夾分隔符;類(lèi)***的下劃線 _ 對(duì)應(yīng)著更深的文件夾層級(jí),但是不影響命名空間;

PSR-4,Autoloader

這里的類(lèi)指代class,interface、trait和類(lèi)似的結(jié)構(gòu);命名空間與文件的對(duì)應(yīng)結(jié)構(gòu)跟PSR-0是一樣的,除了在這個(gè)標(biāo)準(zhǔn)里下劃線沒(méi)有特別的作用,并且命名空間和文件名是大小寫(xiě)敏感的;Autoloader的實(shí)現(xiàn)不可以拋出異常、錯(cuò)誤,也不返回任何值。

命名空間主要就是解決命名沖突的問(wèn)題。合理的運(yùn)用命名空間,可以讓你的項(xiàng)目可具有擴(kuò)展性,可維護(hù)性。寥寥草草的實(shí)現(xiàn),只會(huì)讓后期的開(kāi)發(fā)維護(hù)成本越來(lái)越高。甚至現(xiàn)在你都不需要自己實(shí)現(xiàn)Autoloader,運(yùn)用強(qiáng)大的composer,和遵循相關(guān)的理念就能讓你事半功倍。

PSR-1,Basic Coding Standard

這里說(shuō)的是一些代碼的普遍標(biāo)準(zhǔn),它可以使得團(tuán)隊(duì)相互協(xié)作變得更為順利。

只使用<?php 和 <?= 標(biāo)簽;所有代碼文件使用UTF-8編碼格式;一個(gè)文件要么做聲明(類(lèi),接口,公共函數(shù)等),要么做執(zhí)行之類(lèi)的周邊工作(view,config等),不要一個(gè)文件同時(shí)做兩樣事情;命名空間和類(lèi)根據(jù)PSR-0/PSR-4來(lái)組織;類(lèi)命名首字母全大寫(xiě),其他字母小寫(xiě),例如 StudlyCaps;常亮用全大寫(xiě),用下劃線做分隔符;類(lèi)方法用駝峰式命名,camelCase。

規(guī)則里面沒(méi)有規(guī)定變量怎么命名,團(tuán)隊(duì)可以根據(jù)自己需要制定。小小的規(guī)則,卻可以讓團(tuán)隊(duì),開(kāi)源項(xiàng)目以一種和諧的方式相互協(xié)作,減少因?yàn)槎鄻有远鴮?dǎo)致的內(nèi)耗是很有實(shí)際意義的。如果團(tuán)隊(duì)里有程序猿一定要堅(jiān)持自己的風(fēng)格,這個(gè)猴子的合作精神一定是有待提高的。事實(shí)上一個(gè)團(tuán)隊(duì)各顧各的,失敗就是必然的了。

PSR-2,Coding Style Guide

這是對(duì)PSR-1補(bǔ)充和擴(kuò)展。

代碼使用4個(gè)空格來(lái)縮進(jìn),而不是tab鍵(可以在IDE里面設(shè)置tab鍵轉(zhuǎn)換為4空格);一行的長(zhǎng)度推薦80~120字符之間;namespace聲明塊后面要有一行空白,use聲明塊后面也要有一行空白;類(lèi)和函數(shù)的花括號(hào)都獨(dú)占一行;所有的類(lèi)成員和函數(shù)都要顯示聲明可見(jiàn)性(不要省略掉public);控制結(jié)構(gòu)的關(guān)鍵字后面留一個(gè)空格,函數(shù)調(diào)用后面不要留空(if (x), test());控制結(jié)構(gòu)的起始花括號(hào)與代碼同行,結(jié)束花括號(hào)新起一行;控制結(jié)構(gòu)的括號(hào)不要留空,例如if (x)。

當(dāng)然還有其他的一些推薦標(biāo)準(zhǔn),大家可以自行參考http://www.php-fig.org/psr/

說(shuō)了這么多所謂的標(biāo)準(zhǔn),目的無(wú)非就是為了更好的協(xié)作。有人說(shuō),我自己一個(gè)人做的項(xiàng)目我做主就好了。也沒(méi)錯(cuò),不過(guò)養(yǎng)成這些習(xí)慣也沒(méi)有傷害,你咋知道你一不小心就做出了點(diǎn)啥可以拿出手的東西,不要等到那個(gè)時(shí)候再來(lái)整理代碼來(lái)交代吧?

所以說(shuō),好的代碼組織方式,真的不只是為了好看而已。

責(zé)任編輯:陳琳 來(lái)源: 51CTO.com
相關(guān)推薦

2011-12-16 16:37:02

Fabrics邊界軟件數(shù)據(jù)中心

2017-09-20 14:10:04

大數(shù)據(jù)數(shù)據(jù)分析網(wǎng)紅店

2021-06-08 07:48:26

iOS 15 Linux 操作系統(tǒng)

2022-11-03 09:46:08

2012-01-05 09:26:56

App Store作產(chǎn)品賺錢(qián)

2016-12-16 12:06:09

數(shù)據(jù)分析大數(shù)據(jù)

2016-08-29 20:35:55

谷歌Fuchsia谷歌操作系統(tǒng)

2017-04-24 16:44:41

寬帶千兆速度

2016-12-26 14:46:09

寬帶無(wú)線網(wǎng)絡(luò)Ovum

2020-07-19 08:11:54

Python代碼開(kāi)發(fā)

2015-05-18 09:23:04

JavaScript數(shù)組

2021-05-11 07:36:45

黑客攻擊網(wǎng)絡(luò)安全燃油管道

2011-05-05 13:06:54

許小年企業(yè)轉(zhuǎn)型

2013-03-08 09:54:25

2021-11-30 05:45:48

React組件前端

2011-09-26 10:13:02

微軟數(shù)據(jù)中心云計(jì)算

2009-11-11 09:39:01

張汝京辭職

2012-01-05 10:13:54

云計(jì)算SLA

2013-07-09 14:22:56

Windows 8.1

2021-02-01 14:11:35

數(shù)字貨幣貨幣ATM
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)