iOS App組件化開發(fā)實踐之需要思考的問題

以下討論內(nèi)容都基于這個方案

問題:沒法使用closing issues via commit messages怎么辦枝冀?

1.測試人員不能準(zhǔn)確知道bug需要發(fā)給哪個業(yè)務(wù)組件或是哪個弱業(yè)務(wù)組件罢洲,甚至有時候這個bug是基礎(chǔ)功能組件造成的桑谍。
2.因為原因1齐唆,所以導(dǎo)致測試人員需要把bug統(tǒng)一發(fā)給主App的git project遣铝。根據(jù)我們的CI流程拧烦,我們沒有辦法把某個業(yè)務(wù)組件的信息(比如某個commit里的message是:Fix#213)通過提merge request的方式帶給主App忘闻。

解決

這個問題并沒有很好的解決。修復(fù)bug還是需要手動關(guān)閉issues恋博。幸好的是齐佳,測試人員會即時通過郵件收到。

問題:發(fā)版效率低怎么辦债沮?

1.package這一步要編譯多個Architecture炼吴,造成CI流程耗時。
2.發(fā)版lint這一步需要Test/Lint源碼/Lint二進(jìn)制疫衩,造成CI流程耗時硅蹦。
3.會同時有多個庫需要跑CI。有些只是例行的Test,有些是走發(fā)版流程童芹,有些是其他App的CI涮瞻。尤其是在周五,大家都準(zhǔn)備今天發(fā)個版回家假褪,都集中在了一起署咽。這種情況造成排隊,需要等待長時間嗜价。
4.git runner數(shù)量少艇抠,造成排隊。也無法充分利用gitlab runner的pipelines并行操作久锥。

解決

1.首先是盡量多搞幾臺runner家淤。比如嘗試使用docker?發(fā)動大家把機(jī)器都做成runner瑟由。
2.減化流程絮重。發(fā)版lint這一步可以不考慮Test,因為平時dev分支普通commit都會觸發(fā)Test歹苦。當(dāng)merge到master發(fā)版時其實可以不用Test青伤。也可以考慮不lint二進(jìn)制,實際情況告訴我們殴瘦,一般報錯或警告都是源碼部分狠角,二進(jìn)制沒有什么問題。
3.package時依賴庫盡量使用二進(jìn)制庫蚪腋。
4.避免周五大家都發(fā)版丰歌。平時能發(fā)版就發(fā)版。

問題:一旦某個偏底層的庫升級main版本號屉凯,而又不得不使用它時立帖;依賴它的所有庫都要發(fā)版,工作量大怎辦悠砚?

造成這個問題的原因是API不兼容或有重大重構(gòu)晓勇。而且還會在發(fā)版效率低這個問題上雪上加霜。

解決

必須發(fā)版灌旧,這個是沒辦法的绑咱。

1.在設(shè)計之初,充分考慮和驗證枢泰,盡量避免這種情況出現(xiàn)羡玛。
2.如果是重大重構(gòu)問題,必須盡量保證API向前兼容宗苍,做好充分地測試。
3.盡量避免“不得不使用它”這種情況。

問題:一旦某個偏底層的庫升級main版本號讳窟,誰來推動和通知大家把依賴它的庫也升級让歼?

這個問題在小團(tuán)隊中是不存在的,大家吼一聲就行了丽啡。剩下的都是體力活谋右。

但如果是大團(tuán)隊,多團(tuán)隊补箍,異地改执,多公司這種情況。就很難辦了坑雅。

解決

盡量不要辈挂,盡量不要,盡量不要裹粤。重要的事情說三遍终蒂。

問題:自己改自己的,還是大家一起改遥诉?

我發(fā)現(xiàn)我依賴的一個基礎(chǔ)功能組件有一個bug導(dǎo)致了我這個業(yè)務(wù)組件有一個bug拇泣。但這個基礎(chǔ)功能組件不是我維護(hù)的。我是提一個merge request呢矮锈,還是直接把它去改了霉翔?提merge reqeust效率低,可能維護(hù)者在其他Team苞笨,在異地债朵,沒有上班,正在忙等等猫缭。自己去改效率高葱弟,但是風(fēng)險高。我也不確定會不會搞掛其他東西猜丹,如果沒有測試那更是不敢改芝加。感覺也不符合規(guī)矩。

大多數(shù)情況下不是bug射窒,而是需求滿足不了藏杖。我需要加新需求。

無論是重用的資源或是重用的代碼脉顿,它們最終都會變成一個組件蝌麸。而這個組件目的就是給大家服務(wù)的。到底是大家一起改艾疟,還是有專人維護(hù)来吩?

解決

沒有解決方案敢辩。

我們小團(tuán)隊對于這個問題目前不是很棘手。大家都有權(quán)限去改組件弟疆,只要你走正常發(fā)版流程戚长。

問題:業(yè)務(wù)不能準(zhǔn)確劃分。你中有我怠苔,我中有你怎么辦同廉?

一開始我們太單純了,認(rèn)為業(yè)務(wù)一就是一柑司,二就是二迫肖。就算業(yè)務(wù)出現(xiàn)交叉,也只是A業(yè)務(wù)的AViewContrller需要push B業(yè)務(wù)的BViewController而已攒驰。其實不然蟆湖!

比如首頁。首頁是這個App的第一個頁面讼育,每個重要的業(yè)務(wù)組件都希望在首頁占有一席之地帐姻。那這些業(yè)務(wù)的UI和logic寫在哪里呢?寫在PBHomePageBusinessModule里面奶段?不是說好要解耦的么饥瓷,這樣不就耦合在一起了?

那分散在各個業(yè)務(wù)組建里面痹籍,又如何集成到PBHomePageBusinessModule里面呢铆。既解耦,又能正常工作呢蹲缠?

解決

現(xiàn)在有PBTradeBusinessModule棺克、PBLotteryBusinessModule、PBHomePageBusinessModule這三個業(yè)務(wù)組件线定。大家都依賴一個基礎(chǔ)功能組件娜谊,里面提供一個基類YTXInjectedIntoVCManager。大家都知道這個基類斤讥。

PBTradeBusinessModule提供一個Object Method返回一個YTXInjectedIntoVCManager子類實現(xiàn)纱皆。
PBLotteryBusinessModule提供一個Object Method返回一個YTXInjectedIntoVCManager子類實現(xiàn)。

PBHomePageBusinessModule會通過URL獲取兩個YTXInjectedIntoVCManager注入到自己的ViewController里芭商。

YTXInjectedIntoVCManager里面提供一個rootView表示UI部分派草。再定義協(xié)商一些方法,讓PBHomePageBusinessModule的ViewController調(diào)用铛楣;使用delegate反向傳遞信息近迁。

這樣的好處是即避免了耦合,也避免了知道太多業(yè)務(wù)的細(xì)節(jié)(行為/UI)簸州。

比如

#pragma mark - 自生行為

- (void)updateUI:(nullable NSDictionary *) dict;//更新UI

- (void)updateData:(nullable NSDictionary *) dict;//更新數(shù)據(jù)

#pragma mark - 對應(yīng)VC生命周期

- (void)viewDidLoad;

- (void)viewWillAppear:(BOOL)animated;

- (void)viewDidAppear:(BOOL)animated;

- (void)viewWillDisappear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鉴竭,一起剝皮案震驚了整個濱河市歧譬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拓瞪,老刑警劉巖缴罗,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異祭埂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兵钮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蛆橡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掘譬,你說我怎么就攤上這事泰演。” “怎么了葱轩?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵睦焕,是天一觀的道長。 經(jīng)常有香客問我靴拱,道長垃喊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任袜炕,我火速辦了婚禮本谜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偎窘。我一直安慰自己乌助,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布陌知。 她就那樣靜靜地躺著他托,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仆葡。 梳的紋絲不亂的頭發(fā)上赏参,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機(jī)與錄音浙芙,去河邊找鬼登刺。 笑死,一個胖子當(dāng)著我的面吹牛嗡呼,可吹牛的內(nèi)容都是我干的纸俭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼南窗,長吁一口氣:“原來是場噩夢啊……” “哼揍很!你這毒婦竟也來了郎楼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窒悔,失蹤者是張志新(化名)和其女友劉穎呜袁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體简珠,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡阶界,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了聋庵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膘融。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖祭玉,靈堂內(nèi)的尸體忽然破棺而出氧映,到底是詐尸還是另有隱情,我是刑警寧澤脱货,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布岛都,位于F島的核電站,受9級特大地震影響振峻,放射性物質(zhì)發(fā)生泄漏臼疫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一铺韧、第九天 我趴在偏房一處隱蔽的房頂上張望多矮。 院中可真熱鬧,春花似錦哈打、人聲如沸塔逃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽湾盗。三九已至,卻和暖如春立轧,著一層夾襖步出監(jiān)牢的瞬間格粪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工氛改, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留帐萎,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓胜卤,卻偏偏與公主長得像疆导,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子葛躏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前因 其實我們這個7人iOS開發(fā)團(tuán)隊并不適合組件化開發(fā)澈段。原因是因為性價比低悠菜,需要花很多時間和經(jīng)歷去做這件事,帶來的...
    曹俊_413f閱讀 4,200評論 6 29
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,179評論 25 707
  • 為什么會有這篇文章呢败富? 和之前的同事"我是你爸爸"討論了關(guān)于組件化的事悔醋,對我有很大的啟發(fā)。在此特別感謝"我是你爸爸...
    曹俊_413f閱讀 1,841評論 0 14
  • 冬不動 心思靜 思則和 冷而靜 冬天好思
    星宇極光閱讀 127評論 0 2
  • 身邊的朋友總說我很悲觀。 因為充择,我從來不相信類似“永遠(yuǎn)”德玫、“一直不變”這樣的字眼。 在我看來椎麦,就沒有什么東西可以一...
    柚子lil閱讀 953評論 4 2