日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
拯救強(qiáng)迫癥:井井有條的代碼庫(kù),讓世界變得不一樣!

本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、雞冠網(wǎng)站維護(hù)、網(wǎng)站推廣。

假設(shè)你剛剛加入新的公司新的團(tuán)隊(duì),要開始接觸編碼庫(kù)相關(guān)的工作。你會(huì)面臨的第一個(gè)問題就是:在哪添加團(tuán)隊(duì)項(xiàng)目的源文件呢?

問得好。新團(tuán)隊(duì)有三個(gè)源目錄可供添加文件,你得分清哪個(gè)是你想用的,哪個(gè)是組員用的,哪里的文件是需要重構(gòu)的。

Slack iOS團(tuán)隊(duì)多年來(lái)在編碼庫(kù)方面都做的較好。因?yàn)楹脦状蜗胍M建一些源文件,但又缺少編碼庫(kù)的架構(gòu)模式,再者是近些年開發(fā)人員越來(lái)越多,我們來(lái)到了這個(gè)團(tuán)隊(duì)。

從頂層開始

我們大約有13000個(gè)文件(還在不斷增多),27個(gè)左右的頂層目錄,Objective-C和Swift的混合文件,大約有40個(gè)iOS開發(fā)人員在一個(gè)monorepo中工作。

Slack iOS Xcode File Hierarchy2017

這些是所有文件層次結(jié)構(gòu)狀態(tài)的真實(shí)照片。新來(lái)的員工都在不斷抱怨入了編碼庫(kù),而我們已經(jīng)習(xí)慣操控這些混亂的目錄,一開始的痛苦已經(jīng)不記得了。

我們有無(wú)數(shù)的源代碼目錄(特別是iOS,SlackCocoaSDK和Slack目錄),而且確定目錄要耗費(fèi)好長(zhǎng)時(shí)間,然后再?zèng)Q定如何添加文件。此外,我們決定給編碼庫(kù)增添新的工具,但是目前Xcode項(xiàng)目的狀態(tài)不能很好地支持新增添工具的運(yùn)行。

所以,我和一組ios開發(fā)人員決定開始制定以下幾點(diǎn)規(guī)則:

  • 讓任何新老開發(fā)人員都能快速方便地添加新文件。
  • 在目錄中遵循我們的設(shè)計(jì)模式
  • 借助工具能夠自己維持新的且層次結(jié)構(gòu)簡(jiǎn)潔的文件夾

這將分為兩個(gè)步驟:先將頂層目錄移動(dòng)到連貫的序列中(主要目標(biāo)目錄、擴(kuò)展目錄、框架等),然后是大任務(wù)——源文件夾的組建。

頂層目錄的移動(dòng)不存在爭(zhēng)議,也不難進(jìn)行??赡苄枰獛讉€(gè)開發(fā)員一同花費(fèi)幾周的時(shí)間。首次移動(dòng)中,我們學(xué)到了一些后面階段能用到的技——錯(cuò)過高峰期處理大的移動(dòng),始終合并master,及時(shí)瀏覽評(píng)論。

合并沖突不是過程中唯一棘手的事情,實(shí)際上我們可以用xcodegen更好地消除沖突,大部分沖突都存在于項(xiàng)目文件中。我們也想保存git歷史記錄,能一直一目了然地看到git和finder中的文件。但我們傾向更簡(jiǎn)單的方式,讓所有人員參與進(jìn)來(lái),拖放文件到主頁(yè)。

Slack iOS Xcode Hierarchy 2017(左) and 2018 (右)

從2018年9月的這張圖可以看出,我們已經(jīng)能夠成功組建頂層目錄,讓每一個(gè)目錄都適用且都是頂層目。

組建源文件

現(xiàn)在是時(shí)候處理iOS、SlackCocoaSDK和Slack中的源文件,把它們?nèi)恳苿?dòng)到App或Source中。

老實(shí)說,筆者很怕這一部分。我們需要有一個(gè)清晰的模式,能讓團(tuán)隊(duì)所有的開發(fā)員都參與進(jìn)來(lái),規(guī)則和工具都要確保移動(dòng)方便,工程師能清楚地看到自己是否出現(xiàn)失誤。

圖源:unsplash

筆者對(duì)層次結(jié)構(gòu)的模式展開了很多調(diào)查,竟然發(fā)現(xiàn)關(guān)于文件夾組建的文章少之又少。Uber在這篇文章中寫了他們是如何移動(dòng)到monorepo中的(

https://eng.uber.com/ios-monorepo/)。這對(duì)我們?nèi)绾螌⒋a庫(kù)分為小模塊(規(guī)模較小)提供了啟發(fā)。

最后筆者為團(tuán)隊(duì)提供了三個(gè)選擇:

  • 功能構(gòu)建
  • 主題(基于體系結(jié)構(gòu)的組織)
  • 本體(基于關(guān)系或類似分組的組織)

團(tuán)隊(duì)會(huì)先集中主力在高級(jí)功能,然后才是主題或功能目錄中的MVVM+C。這是新結(jié)構(gòu)中的一個(gè)文件夾:

 
 
 
 
  1. /FeatureFolder 
  2.    /Coordinators 
  3.    /Models 
  4.    /Tests 
  5.       /Functional 
  6.       /Mocks 
  7.       /Unit 
  8.    /ViewModels 
  9.    /Views 

移動(dòng)源文件是一項(xiàng)冗長(zhǎng)繁雜的工程。處理合并沖突讓人冒火,搜索文件名稱空間來(lái)看是否將所有功能文件都拖拽到目錄中要比最初想得更難記住,而且移動(dòng)的大部分文件都不符合剛開始設(shè)定的文件夾規(guī)則。

不過好在有一些勇士挺身而出,做了偉大的舉措——將iOS,SlackCocoaSDK, 和Slack都移動(dòng)到App/Source中。

2020年1月層次結(jié)構(gòu)文件夾的截圖:

Slack Xcode File Hierarchy2020

在移動(dòng)這三個(gè)大型源目錄時(shí),我們提出Danger規(guī)則會(huì)阻止向這些目錄中添加文件,因此會(huì)開始用我們的新模式。

Danger是持續(xù)集成系統(tǒng)中會(huì)用到的工具,可以執(zhí)行提交后的自動(dòng)檢查,同時(shí)將警告和錯(cuò)誤信息發(fā)到PRS上。這是大致模樣:

 
 
 
 
  1. has_slack_directory_additions= !git.added_files.grep(/Slack/).empty?has_slackcocoasdk_directory_additions =!git.added_files.grep(/SlackCocoaSDK/).empty?has_ios_directory_additions =!git.added_files.grep(/iOS/).empty?if has_slack_directory_additions ||has_slackcocoasdk_directory_additions || has_ios_directory_additions   fail(‘This PR is introducing new files intodirectories that are 
  2.    closed for adding new files. Pleaseadd files to App/Source using 
  3.    the new convention found in
  4.    iOS…”>Adding a file to SlackiOS’, sticky: false)end 

遵循Linter

到這里還沒有結(jié)束,我們?nèi)孕枰苿?dòng)新源目錄、App/Source中的內(nèi)容。這里列了“文件夾內(nèi)務(wù)管理”過程中的一些規(guī)則:

文件夾名稱不用留多余的空間(類似Bazel這類工具效果不是很好)

不要像“Helper”或“Uitility”那樣顛倒文件順序

共同定位測(cè)試(如果測(cè)試與源代碼都位于同一個(gè)功能目錄中,什么樣的方式能更容易找到測(cè)試呢?)

分類文件和文件夾!(誰(shuí)不愛字母排序?!)

確保文件處于文件夾中,并且文件要與合適的目標(biāo)頂層目錄相關(guān)聯(lián)。

圖源:unsplash

有一條規(guī)則是真的需要共同定位測(cè)試,所以我們選擇Danger 規(guī)則。任何添加了新文件的新PR都無(wú)法加到App/Tests中。

大致如下:

 
 
 
 
  1. has_slack_directory_additions= !git.added_files.grep(/Slack/).empty?has_slackcocoasdk_directory_additions =!git.added_files.grep(/SlackCocoaSDK/).empty?has_ios_directory_additions =!git.added_files.grep(/iOS/).empty?if has_slack_directory_additions ||has_slackcocoasdk_directory_additions || has_ios_directory_additions   fail(‘This PR is introducing new files intodirectories that are 
  2.    closed for adding new files. Pleaseadd files to App/Source using 
  3.    the new convention found in
  4.    iOS…”>Adding a file to SlackiOS’, sticky: false)end 

文件夾組創(chuàng)建一個(gè)Slack渠道,以供人們?cè)诓淮_定是否添加文件的時(shí)候進(jìn)行咨詢。對(duì)于往哪添加文件的困惑會(huì)比你想的多,甚至小移動(dòng)都會(huì)帶來(lái)很大麻煩。

我們已經(jīng)有了很大的進(jìn)步,得到了來(lái)自更優(yōu)秀iOS團(tuán)隊(duì)的支持,但等待我們的是更多的事情。

這不是一個(gè)人能做好的工作,你需要跟編碼庫(kù)工作環(huán)節(jié)中的每一位人員協(xié)同合作起來(lái)。你需要更好的團(tuán)隊(duì),并不只是為了移動(dòng)文件,而是修飾規(guī)則,添加更多的工具。有更多人的參與意味著很多人會(huì)從中學(xué)習(xí),之后便有能力教他人如何在編碼庫(kù)工作中添加文件。

成功和幸福的秘方很簡(jiǎn)單:假如你跟我們一樣有monorepo,那就組建一個(gè)團(tuán)隊(duì),制定硬性且能快速實(shí)現(xiàn)的規(guī)定。

規(guī)則可以被打破,你跟任何開發(fā)員都有機(jī)會(huì)討論,你需要核心隊(duì)伍來(lái)創(chuàng)建支持規(guī)則的工具,讓文件組建更水到渠成。核心成員也可以花些時(shí)間思考尋找最佳文件結(jié)構(gòu),來(lái)服務(wù)于團(tuán)隊(duì)組織或工作模式。

圖源:unsplash

當(dāng)開發(fā)員明白在哪加文件、以什么樣的方式可以加速開發(fā)、讓自己在代碼庫(kù)的工作環(huán)境中更加自在時(shí),世界就會(huì)變得不同。

SwiftLint、Danger、本地腳本這些工具都會(huì)助你一臂之力。但有一點(diǎn)需要提醒,那就是首先你需要明白工具在何處有用,這通常需要?jiǎng)觿?dòng)手指。

使用工具,共同參與,像解決其他對(duì)公司不利的問題一樣處理它。這是一件超值的事情,會(huì)讓大家更輕松地找到或添加文件,幫助開發(fā)員理解編碼庫(kù)的架構(gòu)模式。

幸福是什么?是井井有條的代碼庫(kù),是全體成員的思考和智慧,是體驗(yàn)感與學(xué)習(xí)的共贏。這就是幸福呀!


網(wǎng)站欄目:拯救強(qiáng)迫癥:井井有條的代碼庫(kù),讓世界變得不一樣!
鏈接URL:http://www.5511xx.com/article/cdcodpd.html