iOS端頁面模塊可配置化方案(一)

KLOOK客戶端配置化方案 輕量級iOS頁面模塊化框架 (簡介)

  • 背景

      1. 支付成功頁UI與業(yè)務(wù)邏輯耦合到一個頁面控制器,導(dǎo)致改動困難。加上大部分以前的頁面的架構(gòu)設(shè)計是不太方便與我們后續(xù)業(yè)務(wù)的快速發(fā)展,因此我們需要設(shè)計一個盡量適用于APP內(nèi)大部分頁面的模塊化方案,降低后續(xù)頁面開發(fā)與頁面變化所帶來的研發(fā)成本。
      1. 多條業(yè)務(wù)線共同修改訂單詳情頁,導(dǎo)致代碼沖突嚴重,代碼可讀性與維護性差,影響開發(fā)效率。
  • 設(shè)計原則與目標(biāo)

    • 框架設(shè)計要以現(xiàn)有架構(gòu)(MVC)為基礎(chǔ),盡可能復(fù)用現(xiàn)有模塊以節(jié)省時間成本(例如一個舊的Cell,只需要遵循容器協(xié)議,即可復(fù)用于新容器,并且對舊的代碼沒有影響),框架需要低侵入性,方便以后替換與更改。
    • 以后頁面內(nèi)以組件為單位,通過組合的方式,只需要配置文件增刪內(nèi)容,不需要改動到整體頁面UI代碼,就可以更改頁面內(nèi)容。且UI組件是可以以很低的成本復(fù)用到其他頁面。
  • 簡單分析App頁面渲染與展示基本流程

    • 請求網(wǎng)絡(luò)數(shù)據(jù) -> 渲染列表 -> 用戶交互 -> 跳轉(zhuǎn)新頁面 -> 繼續(xù)請求網(wǎng)絡(luò)數(shù)據(jù)...

    • 請求網(wǎng)絡(luò)數(shù)據(jù) -> 渲染列表 -> 用戶交互 -> 刷新數(shù)據(jù)/更新視圖/提交數(shù)據(jù)

  • 抽象APP內(nèi)有代表性的頁面結(jié)構(gòu)

    • 純展示界面

      • 首頁、城市/國家頁、活動詳情頁、訂單詳情頁、支付成功頁、越來越多的垂直頁...


        image.png
    • 具有交互邏輯界面

      • 個人信息、下單頁、支付頁
  • 可配置化抽象

    • 頁面組件以 Section 為單位,分為UI部分,與viewModel部分,UI部分負責(zé)視圖樣式,ViewModel負責(zé)業(yè)務(wù)邏輯,隔離UI與業(yè)務(wù)邏輯,方便復(fù)用。因為部分頁面雖然UI一樣,但數(shù)據(jù)Model不同,有些頁面業(yè)務(wù)邏輯不變,但是UI卻有改動,這樣做可以隔離UI與業(yè)務(wù)邏輯,使UI與ViewModel都能達到可替換與復(fù)用的目的。


      image.png

針對負責(zé)的模塊可以使用ViewModel,但目前的實現(xiàn)沒有使用,而是直接使用VC進行數(shù)據(jù)請求與業(yè)務(wù)邏輯處理 。后期做進一步優(yōu)化的時候再考慮實現(xiàn)

  • 統(tǒng)一頁面容器,通過協(xié)議的方式,實現(xiàn)協(xié)議方法,就可以修改配置文件,放到這個頁面容器中(以前我們每個頁面并沒有使用統(tǒng)一的容器,導(dǎo)致UI組件在頁面之間復(fù)用的成本較高)


    image.png
    • 在統(tǒng)一頁面容器中,Section 間可以任意組合 && Section內(nèi)可以配置獨立數(shù)據(jù)模型 && Section內(nèi)有獨立渲染與刷新數(shù)據(jù)機制
  • 具體實現(xiàn)方案

    • 字符串映射綁定Section視圖,刷新指定 Section

    • 使用統(tǒng)一容器

  • 代碼實現(xiàn)

    • 容器協(xié)議

    • 頁面配置類

  • 重構(gòu)方案實現(xiàn)前后對比

    • 看代碼....
  • 優(yōu)勢 與 局限性

    • 統(tǒng)一容器,減少代碼量,減輕負擔(dān)。通常情況下只需要修改配置文件即可組裝出頁面,讓開發(fā)者更專注于實現(xiàn)具體模塊樣式與業(yè)務(wù)。

    • 邏輯清晰,業(yè)務(wù)與UI分離,利于后期維護。

    • 擁抱變化,可以很方便的增刪或替換Section(只需要更改配置或映射關(guān)系)

    • 利于復(fù)用,理論上在所有使用統(tǒng)一容器的頁面內(nèi)都可以復(fù)用現(xiàn)有Section

    • 暫時不支持炫酷動畫,特殊業(yè)務(wù)界面暫不適用

  • 后續(xù)

    • 開發(fā)一個新的垂直頁,只需要拉取數(shù)據(jù),并配置好該垂直頁需要使用的 Section
    • 配置文件通過服務(wù)端下發(fā),動態(tài)變更樣式(A/B Test)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容