成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

原創
開發 項目管理
話說最近作者被派到了一個活兒,需要使用NetSuite的API來自動將網站的客戶導入NetSuite系統里管理。NetSuite在CRM系統里也算個比較知名的大牌了,據說是Oracle傳授的管理經驗,功能也著實強大。

程序猿隊伍里面不乏【差不多】先生:代碼寫出來能用就行了;開發環境能用就行了;上線前隨便測測就行了;你要我再給你就行了...這些態度不僅惱人,而且對于產品質量、團隊協作來說都是危害甚大,這在初創項目中結果特別明顯。今天只談代碼,為啥捏?因為有個槽它不吐不快啊!作者也算見過點世面的了,但是還是被惱到了。

話說最近作者被派到了一個活兒,需要使用NetSuite的API來自動將網站的客戶導入NetSuite系統里管理。NetSuite在CRM系統里也算個比較知名的大牌了,據說是Oracle傳授的管理經驗,功能也著實強大。然后作者就開始研究SuiteTalk PHP Toolkit,看了半天的文檔,大概明白了一些業務流程做了一些準備工作,就等著用這API進行神圣的***次Web Service交互。洋洋灑灑寫下了一些調試代碼開始試驗。結果你能想到,我瘋了。一個開源庫有3個文件,一個config,一個基礎類加工具函數,***一個就是將近14W行代碼大小2MB多的php文件,幾乎所有的類都寫在一個文件里面了。其實這也還好,不就是看代碼會費事點么。重點是這個:

請注意這個庫是沒有命名空間的,類名也沒有任何的前綴。敢問猴兒們做的項目里,有多少個項目是沒有個Customer類?引入外部庫是為了改自家的類名么?當然了,如果你的項目里本身就引入了命名空間,這個問題影響不大;但是大家手頭在維護的項目里,大多都有超過幾年的歷史代碼,也就是有很大幾率是沒有命名空間的。

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

作者理解猴兒的成長需要過程,需要不斷試錯方能練成九陰白骨爪。因為自己也是這么過來的,雖然白骨爪還沒有,豉汁鳳爪倒是有一對。但是像NetSuite這樣的大品牌弄出這么青澀的庫還真是很少見。

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

[[170536]]

PSR-0在2014年10月21日已經被標志為淘汰過時了,現在推薦的是PSR-4,我們看到composer里面還保留著對PSR-0的支持。

PSR-0,Autoloading Standard

文件的結構為Vendor\(Namespace)*\ClassName.php;每個命名空間的最頂層空間一定是Vendor,例如對于NetSuite來說,NetSuite就應該是它的最頂層命名空間;中間 可以有無數層命名空間;命名空間的分隔符會在找相應類文件時轉換為系統的文件夾分隔符;類***的下劃線 _ 對應著更深的文件夾層級,但是不影響命名空間;

PSR-4,Autoloader

這里的類指代class,interface、trait和類似的結構;命名空間與文件的對應結構跟PSR-0是一樣的,除了在這個標準里下劃線沒有特別的作用,并且命名空間和文件名是大小寫敏感的;Autoloader的實現不可以拋出異常、錯誤,也不返回任何值。

命名空間主要就是解決命名沖突的問題。合理的運用命名空間,可以讓你的項目可具有擴展性,可維護性。寥寥草草的實現,只會讓后期的開發維護成本越來越高。甚至現在你都不需要自己實現Autoloader,運用強大的composer,和遵循相關的理念就能讓你事半功倍。

PSR-1,Basic Coding Standard

這里說的是一些代碼的普遍標準,它可以使得團隊相互協作變得更為順利。

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

規則里面沒有規定變量怎么命名,團隊可以根據自己需要制定。小小的規則,卻可以讓團隊,開源項目以一種和諧的方式相互協作,減少因為多樣性而導致的內耗是很有實際意義的。如果團隊里有程序猿一定要堅持自己的風格,這個猴子的合作精神一定是有待提高的。事實上一個團隊各顧各的,失敗就是必然的了。

PSR-2,Coding Style Guide

這是對PSR-1補充和擴展。

代碼使用4個空格來縮進,而不是tab鍵(可以在IDE里面設置tab鍵轉換為4空格);一行的長度推薦80~120字符之間;namespace聲明塊后面要有一行空白,use聲明塊后面也要有一行空白;類和函數的花括號都獨占一行;所有的類成員和函數都要顯示聲明可見性(不要省略掉public);控制結構的關鍵字后面留一個空格,函數調用后面不要留空(if (x), test());控制結構的起始花括號與代碼同行,結束花括號新起一行;控制結構的括號不要留空,例如if (x)。

當然還有其他的一些推薦標準,大家可以自行參考http://www.php-fig.org/psr/

說了這么多所謂的標準,目的無非就是為了更好的協作。有人說,我自己一個人做的項目我做主就好了。也沒錯,不過養成這些習慣也沒有傷害,你咋知道你一不小心就做出了點啥可以拿出手的東西,不要等到那個時候再來整理代碼來交代吧?

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

責任編輯:陳琳 來源: 51CTO.com
相關推薦

2011-12-16 16:37:02

Fabrics邊界軟件數據中心

2017-09-20 14:10:04

大數據數據分析網紅店

2021-06-08 07:48:26

iOS 15 Linux 操作系統

2022-11-03 09:46:08

2012-01-05 09:26:56

App Store作產品賺錢

2016-12-16 12:06:09

數據分析大數據

2016-08-29 20:35:55

谷歌Fuchsia谷歌操作系統

2020-07-19 08:11:54

Python代碼開發

2016-12-26 14:46:09

寬帶無線網絡Ovum

2017-04-24 16:44:41

寬帶千兆速度

2015-05-18 09:23:04

JavaScript數組

2021-05-11 07:36:45

黑客攻擊網絡安全燃油管道

2011-05-05 13:06:54

許小年企業轉型

2013-03-08 09:54:25

2021-11-30 05:45:48

React組件前端

2011-09-26 10:13:02

微軟數據中心云計算

2012-01-05 10:13:54

云計算SLA

2009-11-11 09:39:01

張汝京辭職

2013-07-09 14:22:56

Windows 8.1

2021-02-01 14:11:35

數字貨幣貨幣ATM
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜视频一区二区 | 综合久| 国产丝袜一区二区三区免费视频 | 久久99精品国产自在现线小黄鸭 | 极品国产视频 | 九九久久精品 | 欧美在线网站 | 91就要激情 | 亚洲一区二区三 | 日韩欧美一区二区三区四区 | 成人午夜精品 | 99精品国产一区二区三区 | 91大神在线看 | 亚洲精品乱码久久久久久按摩观 | 国产精品亚洲精品 | 国产在线中文字幕 | 国产一级视频在线观看 | 午夜精品一区二区三区在线播放 | 成人午夜免费在线视频 | 国产高清久久久 | www.干| 91网站视频在线观看 | 亚洲一区二区三区四区五区中文 | 日韩成人在线观看 | 国产乱一区二区三区视频 | 在线一区观看 | 99视频免费看 | 一区二区三区视频在线免费观看 | 国产福利91精品 | 成年免费大片黄在线观看岛国 | 性高朝久久久久久久3小时 av一区二区三区四区 | 97超碰站| www.日日操| 国产福利在线视频 | 日韩中文字幕在线视频 | 欧美日韩国产一区二区 | 1级黄色大片 | 中文在线观看视频 | 久久在看 | 激情在线视频网站 | 国产精品99久久久精品免费观看 |