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

iOS 大型項目開發漫談

移動開發
標題有些嚇人請不要害怕,不過這確實不是掃盲貼,需要一定的iOS開發基礎。在我多年的碼農生涯中絕大部分時間都是做的小項目,大一些的可能也就是百萬行代碼的樣子,跟Windows系統幾千萬行源碼比簡直就是小巫見大巫。

[[147407]]

標題有些嚇人請不要害怕,不過這確實不是掃盲貼,需要一定的iOS開發基礎。在我多年的碼農生涯中絕大部分時間都是做的小項目,大一些的可能也就是百萬行代碼的樣子,跟Windows系統幾千萬行源碼比簡直就是小巫見大巫。不過,一個iOS項目的源碼有數百萬行算蠻大了。我想說的是,人總是會成長,會擔當更大的責任接受更大的挑戰,終有一天組織會有重要任務交給你。不過軟件開發不是一朝一夕,也不會有多么的轟轟烈烈,更多的是平淡中無數的細節處理。做大型項目未必就需要多么高深的技術,也許就是細節的科學處理與規范的管理。

首先說說編程語言的選擇,Objecive-C還是Swift?我還沒有在項目中使用Swift,因為我說服不了自己去用它,它的優勢在哪里,你也不能強迫隊友去學習Swift。當然,不用不代表不會,一入行就用Swift開發無意義產品的人沒資格戴著有色眼鏡鄙視不會Swift的同行。你知道Objecive-C與Swift混編有多少坑嗎?你知道Swift也是跟Objecive-C共用一個Runtime環境嗎?你知道使用了Swift會使得ipa包大10多M嗎?Swift代表未來,Objecive-C是當下。Swift能做的Objective-C都能做,比如Closure完全就可用Blocks來代替,Tuple完全可以用結構體來代替。生產環境用Objective-C,業余觀望Swift,這就是我的態度。Raywenderlich已經出了一堆Swift的教程,在前沿科技的使用上國內總是慢一個節拍,很大程度上那堵墻阻礙了國內IT從業者的發展,墻的開發者(包括我的信息安全工程老師)終有一天會受到歷史的審判。

再來說說應用架構,真是成也MVC,敗也MVC。如果放任團隊中的小朋友按他們所理解的MVC來開發,一般情況下出現的惡果就是類之間高耦合,Controller胖得不像話簡直就成了百寶箱......每一次的版本迭代都會痛苦不堪,若功能不多還能勉強維持功能多了勢必崩塌,就比如世博園中國館吧,再按比例多蓋5層試試看,呵呵。到頭來開發人員實在受不了就只能選擇重構要么跑路,后者更現實大家都懂,尤其是業務為王的企業里,代碼質量算個屁只要能work,可是好的程序員都是有尊嚴的,deadline或是拍腦袋的政治任務通常會讓程序員疲于應付,厭倦了也就該撤了。言歸正傳,既然MVC顯得臃腫,那就是瘦身唄。通常瘦身后的MVC在iOS界被叫成MVCS或MVVM,這2個當然不是同一個東西,項目選用MVCS還是MVVM還是得看你的業務特性。MVCS與MVVM就那么***嗎?當然不,MVCS要注意Service/Store的濫用,其中的數據是否會被不同的模塊污染。MVVM用得不好也會增加項目的維護難度,我說的是View和ViewModel之間松散的綁定關系,在iOS開發中一提到MVVM大家就想到ReactiveCocoa,其實沒有ReactiveCocoa也可以啊,只是ReactiveCocoa的好處多多,如代碼收斂不必寫得到處都是,其他好處自己去挖掘吧。

關于工程文件組織結構,很多人是Controllers/Views/Models/Vender...這樣歸類,其實這有個問題,比如你要找ControllerA的TableView用到的cellB類,你還要去Views里面一個個找,太痛苦了,就算search也還是苦畢竟不能所見即所得。我一般是按 Module來劃分,每個Module里面有Controllers/Views/Models/Stores/API這樣的分類,API是每一個接口的請求的封裝,供Store調用,得到的數據解析實例化為Model再通過block傳遞給Controller去刷新View,很繞嗎?使用RAC,Controller訂閱Store里創建的RACSignal也能做到,U can make a try。還有就是Helper與Utility,與業務無關,具有對象性質,提供支持功能的代碼放到Helper,比如創建一個自定義對象的封裝。如果只是屬于函數或算法,不是對象而且很多地方能用到,就放到Utility,比如排序/加密算法。

工程文件組織結構

關于網絡通信模塊的設計,我個人認為應該是每一個HTTP請求都應該獨立互不干擾,就是你封裝的POST/GET方法都會創建一個臨時的對象,而長連接一般只維持一個實例對象采用單例的方式創建。我會為每一個HTTP 接口請求創建一個API對象,在里面請求數據,當然了為了避免請求代碼的重復編寫可以建立一個BASE API類,子類調用父類的請求方法就行了,不同的只是接口與參數。思想就是這樣,以后有時間再來講講API類的設計。

關于多線程,在iOS開發中用得最多的就是GCD和NSOperation了,在大部分情況下GCD就夠用了。但是NSOperation也有它的優勢,比如可以設置并發個數,可以設置線程間的依賴,可以暫停和恢復,比較靈活,多線程下載就經常用它。面試中也經常會問GCD與NSOperation的區別,這個自己去查查,資料還是比較豐富的,底下也有篇關于NSOperation的參考鏈接。GCD雖然強大,可是還是有很多人瞎用,真替他們著急,隨便說幾點:

1.濫用dispatch_after做定時器導致crash!不知道還有個東西叫dispatch_source_set_timer嗎?

倒計時

2.不要輕易用dispatch_sync,線程同步方法那么多為何你偏偏要愛上不該愛的它!尤其不要在dispatch_async里面用dispatch_sync,不要問為什么,百度里面google一下!

3.dispatch_once也就創建單例的時候用用,不要瞎用。dispatch_once是整個app生命周期內只執行一次,不是對象生命周期內只執行一次,大哥!

4.什么!你居然不知道用GCD創建串行線程與并行線程!

串行

并行

關于多團隊協作,如果項目用分模塊的方式進行開發,CocoaPods無疑是個非常好的工具。相對獨立的模塊盡量打成私有pod,這樣,公共平臺把整個項目的框架打好,其他的業務部門只需要自己建立一個私有pod,使用公共平臺打好的那些私有pod獨立開發調試就好,而不必時時提交代碼到主工程,這樣的話會非常麻煩,比如代碼merge沖突,證書沖突,會瘋掉的。當模塊開發完畢再提交到主工程就好了。當然私有pod打多了也麻煩,私有pod依賴更多的私有pod在添加文件到target的時候會很痛苦,Xcode默認是target全部選上的,要跟Apple反饋一下希望他們會解決。

關于數據持久化,最重要的就是保持數據源的一致。還有一個比較重要的就是APP升級之后的向前兼容,那種你一升級app啟動崩潰的問題,多半是新版本的數據結構發生變化,不支持老版本產生的數據或者設置等。我一直偏愛sqlite,用得最多的就是FMDB,對CoreData無愛。要知道蘋果自己的app NEWS用的就是FMDB啊,我還記得有人問facebook的工程師“為啥你們的app速度慢呢”,“because we use core data!”。有個開源庫MagicRecord,對CoreData的深度封裝,我用過,其實也還不錯。

另外,單元測試真的有必要嗎?單元測試可以使邏輯清晰化,當你僅僅閱讀單元測試代碼的話,你會發現它們寫的好像編程教科書里的偽代碼。當TDD的時候,這一點尤其有用。通過寫單元測試,你可以很快的把邏輯梳理清楚,然后用代碼來實現它。單元測試可以降低代碼的耦合度。我們知道,耦合度高的代碼很難做單元測試,反過來,如果你必須做單元測試,你是不會把代碼寫的耦合度很高的。單元測試可以讓你知道你對代碼的修改是否影響到了原來就有的功能,但是這也是所有的回歸測試都可以做的。單元測試的特點在于:它測試的東西足夠小從而在代碼重構后仍能復用。單元測試是唯一一個可能使覆蓋率達到100%的測試。單元測試開始難,持續做的話會越來越容易,因為難主要是因為環境的搭建和樁函數的缺失。單元測試很容易定位Bug,它好像在你的程序中打了無數的斷點。單元測試很費時間,不過,后續改Bug更費時間。

講了這么多,***說說需求吧。我認為在需求評審時應該盡量拋出細節問題給pm,他們不懂技術,如果需求不確定就盲目開發,然后中途再改需求,這是很傷士氣的,尤其是涉及到架構的修改,這讓我想到那張pm改需求被程序員拍板磚的圖,嘿!需求不穩定,就別動工,寧愿打醬油看博客。好了,啰嗦了這么多,有多少人會看到這里呢?希望以后有空回頭來增加些內容。

責任編輯:chenqingxiang 來源: CocoaChina
相關推薦

2015-08-26 10:36:32

ios開發漫談

2022-03-14 10:24:31

編程語言開發

2021-05-12 08:54:56

FastAP web 框架數據庫操作

2012-04-01 15:03:39

大型項目開發者

2021-01-13 09:34:45

項目Gson框架

2024-01-22 09:17:35

2024-12-26 08:00:38

2019-12-16 11:16:22

Git子模塊項目

2021-01-26 05:39:06

項目模塊代碼

2012-09-23 09:38:13

鐵路客票系統

2019-10-10 10:30:26

MVCModelController

2020-09-15 06:13:05

Vue.jsJavaScript框架

2015-12-08 09:13:05

開發維護Java項目

2024-02-21 09:32:18

開發架構

2018-01-09 22:18:18

架構阿里巴巴服務器

2020-08-30 14:32:57

Vue.jsJavaScript前端

2017-01-17 14:42:21

Ceph云計算存儲

2012-06-12 09:15:50

開發語言

2009-06-25 14:32:00

Java BS開發模式

2015-09-07 09:13:31

ios教學
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线一区| 红桃视频一区二区三区免费 | 国产精品呻吟久久av凹凸 | 秋霞国产| 日韩不卡一区二区 | 免费av手机在线观看 | 成人二区| 日韩欧美一级片 | japan25hdxxxx日本 做a的各种视频 | 久久久久国产一区二区三区 | 亚洲精品一区二区 | 国产一区二区三区免费 | 国外激情av | 久久一本| 亚洲一级视频在线 | 日本aaaa | 日韩欧美成人精品 | 尤物视频在线免费观看 | 一区二区在线 | 九九亚洲| 青青草原综合久久大伊人精品 | 91免费观看 | 久久福利网站 | 日韩在线小视频 | 日本小电影网站 | 波多野吉衣在线播放 | 欧美精品在欧美一区二区少妇 | 国产伦一区二区三区视频 | 一级大片网站 | 国产一区二区三区免费观看在线 | 国产美女在线精品免费 | 91免费福利视频 | 日韩中文字幕一区 | 欧美在线网站 | 最近最新中文字幕 | 一区二区三区av | 日韩www | 欧美久久一区 | 羞羞视频网站免费观看 | 超碰av免费 | 久久美国|