close

之前專案遇到一個狀況,一個小遊戲的APP

MainViewController(Activity) 包含了選擇關卡的Function, 且包含了進入商店頁的View

而一但選擇關卡後會依照是不是VIP選擇要進入遊戲 或是打開商店頁請使用者購買

如下圖的左上

所有程式碼都包在主要的MainViewController

一旦我們有另外一個ViewController時, 我們就必須複製一樣的code, 

以之前遇到的例子就是新功能搜尋系統, 除了搜尋外我們還要能從搜尋的結果進入遊戲

而以當時的模組就只能複製一份一樣的code, 而這樣的操作在後續的維護上風險是非常高的.

截圖 2020-11-12 下午5.49.02

而為了讓所有的ViewController都能使用到商店頁及進入遊戲的功能

我們將兩者抽離出來,並使用不同的Manager控管

以下圖為例,

當我進入一個新的VC(ViewController)時且該VC需要使用商店頁時,我就讓該商店頁存下VC及對應的protocal(Inteface)

存下VC是作為載體顯示商店頁, 而Protocal 是當該商店頁有行為時需通知原先的VC進行操作ex. 開關Loading,

完成商店Manager註冊後,

如果我要進入某個遊戲, 我只需通知該遊戲的ID及我當前的ViewController作為載體

如果直接進入遊戲就用VC去開啟遊戲

如果要進入商店頁則走ClassMnager -> StoreManager -> add View on VC

而這樣操作的好處是, 我當前的VC可以隨意抽換, 未來任何VC想實作相關功能,都只要在viewDidLoad(OnResume)時註冊即可

這樣就解耦啦~

 

arrow
arrow
    全站熱搜

    蔥哥 發表在 痞客邦 留言(0) 人氣()