之前專案遇到一個狀況,一個小遊戲的APP
MainViewController(Activity) 包含了選擇關卡的Function, 且包含了進入商店頁的View
而一但選擇關卡後會依照是不是VIP選擇要進入遊戲 或是打開商店頁請使用者購買
如下圖的左上
所有程式碼都包在主要的MainViewController
一旦我們有另外一個ViewController時, 我們就必須複製一樣的code,
以之前遇到的例子就是新功能搜尋系統, 除了搜尋外我們還要能從搜尋的結果進入遊戲
而以當時的模組就只能複製一份一樣的code, 而這樣的操作在後續的維護上風險是非常高的.
而為了讓所有的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)時註冊即可
這樣就解耦啦~
留言列表