<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      iOS MVVM設計模式

      前言:

      MVC 模式 是iOS業內人士耳熟能詳的,后來逐漸有人提出了MVVM的設計模式,這篇文章的目的是在熟知MVC模式的基礎上進一步認知什么是MVVM模式,并且在工作中MVVM思想怎么能對我們有助力作用。
       
      一 .MVC:(Model View Controller)  是構建iOS App的標準模式。大多數開發者也一定在日常的開發中把MVC思想運用的淋漓盡致。

      1.基本目的       

       將視圖和數據分離開來,降低藕荷度

      2.基本幾個要點 

       (1)Model        :  (數據模型,數據)持有并負責管理數據:封裝,存儲,處理數據運算等

       (2)View         :    (視圖,顯示) 顯示UI呈現給用戶,對用戶的target action 行為 有響應

       (3)Controller :(控制器,管理中心)調度程序工作,調解Model和View之間的交互 ,全部的表示邏輯、業務邏輯都在此 eg網絡請求、事件響應方法

       
      3.工作原理:(參考1)

       1)Model 和 View 永遠不能相互通信,只能通過 Controller 傳遞。

       2)Controller 可以直接與 Model 對話(讀寫調用 Model),Model 通過 Notification 和 KVO 機制與 Controller 間接通信。

       3)Controller 可以直接與 View 對話,通過 outlet,直接操作 View,outlet 直接對應到 View 中的控件,View 通過 action 向 Controller 報告事件的發生(如用戶 Touch   我了)。Controller 是 View 的直接數據源(數據很可能是 Controller 從 Model 中取得并經過加工了)。Controller 是 View 的代理(delegate),以同步 View 與 Controller。

      4.優點

      (1)實現了基本目的:將視圖和數據分離開來,降低藕荷度

        (2)   方便debug調試問題出處是Controller還是View還是Model

      5. 缺點

      (1)隨著項目的不斷迭代開發,Controller 承擔業務量加大,負擔變重。因此網上提及MVVM好處時候不免都diss一下MVC是“Massive View Controller(重量級視圖控制器)”

      (2) 較差的可測試性

      (3) 遺失的網絡邏輯 //過重的Controller 被堆砌,很難從堆砌的網絡邏輯中查找對應哪一個具體UI展示的

      6.目前,我們做的盡可能給Controller 減負的方式

      (1)遵循基本OC編碼規則,明確函數分組和協議實現中使用#pragma mark -來分類方法。好處來說,代碼結構清晰。不論厚重與否,我們都遵循統一編碼規則,從review,迭代的角度,都是相對有利的

        (2) 使用類別category,來管理控制器中的業務,一個業務一個同級別類別category。 例如首頁元素:

      •  yiji和起居板塊
      •  健康檔案計劃
      •  調理方案
      •  癥狀
      • 文章list

             這些豐富的數據源來一個或者多個接口,UI展示出來有其特有的位置,于是選擇使用類別category的方式來處理。

             注意:使用類別只能離散化代碼,邏輯層面更優秀一些,但不能真正減輕ViewController的負擔。絕對依賴,還是有問題。進一步優化還是值得深挖挖

      (3)分離數據源:實現 UITableViewDataSource 代理 協議相關的代碼封裝成一個類。這個我之前寫過一個博客 參考鏈接2。

             注意:這種方法最好是團隊合作在開發上有交集,要絕對大家都知曉你這么做,并能認同這種優化方式,否則一個后果是,別人讀不懂你的代碼,同事又寫了一遍。。。反而這種分離數據源的方法是一種過渡設計了

      (4)使用一些優秀第三方減少代碼量

             eg. Masonry:在純代碼手動代碼設置視圖的約束時,優秀得無可挑剔

                 YYKit系列:真是業內大牛利用自己學習心得開源出來的,非常牛逼,閱讀一遍源碼,自己再進行開發時候都下筆如有神的感覺。

                                其中YYModel真是比自己寫的那個反射好多了,足夠面向對象,足夠優秀,突然在大神面前感覺自己就是渣渣。繼續努力,保持對學習進步的熱忱之心

      (5)尊重面相對象,該封裝的方法,模塊都進行封裝。

             eg.比如AFNetWorking ,做好封裝。把相近業務網絡請求部分放進一個類別里面,在控制器中直接調用我們自己的封裝即可

               

      二.MVVM:(Model View View-Mode) 是MVC的變種衍生出的一種模式一種可以很好地解決Massive View Controller問題的辦法就是將 Controller 中的展示邏輯抽取出來,放置到一個專門的地方,而這個地方就是 viewModel
       
      1.基本目的    :解決重MVC問題,將Controller中的展示邏輯抽取出來 (其實目的都是分離Model與View 更好的解耦合
       
      2.基本幾個要點 

       (1)Model                     :  數據層    和MVC中model一樣

       (2)ViewController/View:  展示層    它包括了一些數據綁定,事件,和行為 和 UI展示給用戶 (ViewController只做了部分膠水作用,View還是純展示,觸發事件響應給)

       (3)ViewModel             :數據模型  封裝業務邏輯,業務網絡處理,封裝數據緩存,即把MVC中 控制器中的以上三部分等放到ViewModel里面

       3.工作原理圖:(參考鏈接4)
          
         
           
           核心ViewModel設計
       
         (1)與View成對設計,負責關聯Model和處理UI邏輯,是界面的非展現部分。
                把原MVC中控制器里展示邏輯提取出來。參考圖中,主要是封裝業務邏輯,業務網絡處理,封裝數據緩存。 
        
      4.優點
      (1)相對MVC 進一步實現了 UI與邏輯的分離 解耦合
      (2)可測試性:單元測試方便,基本集中于測試ViewModel
      (3)配合ReactiveCocoa療效好。里面豐富運用了Hook思想響應式編程思想。。。監聽數據變化更新UI
      5.缺點
      (1)簡單場景不適合MVVM模式,過猶不及反而顯得過重。
             每次進行架構或者功能設計時候都應該要仔細思考,選擇的設計模式是否合理有效,是否能夠可持續發展
      (2)ViewModel本身也會越來越沉重 ,項目業務邏輯,交互邏輯增加。
              ViewModel可復用性不太可觀,高度復用耦合性會加大。所以會不斷創建各中ViewModel,容易出現類型爆炸,提高維護成本。
        (3)  對于過大的項目,數據綁定和數據轉化需要花費更多的內存。
      (4)數據綁定機制導致問題轉移難以調試bug,eg因為表象是UI賦值顯示問題,但是還可能是模型轉化,根本問題被轉移了。。。
       
       以上
       
       
       
      參考
      1.http://www.rzrgm.cn/QianChia/p/5771082.html
       
      2. http://www.rzrgm.cn/someonelikeyou/p/6522150.html 
       
      3. http://www.cocoachina.com/ios/20150122/10987.html 架構模式
      4. http://www.cocoachina.com/ios/20170612/19500.html 
      5. https://www.jianshu.com/p/a21dec9ab84f

      posted on 2018-03-23 21:48  ACM_Someone like you  閱讀(306)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 一本久道中文无码字幕av| 国产亚洲精品第一综合| 精品超清无码视频在线观看| 国产欧美日韩精品丝袜高跟鞋| 亚洲国产成人久久精品软件| 免费看成人欧美片爱潮app| 国产又色又爽又黄的视频在线| 国产最新进精品视频| 金阳县| 国产高颜值不卡一区二区 | 色噜噜在线视频免费观看| 亚洲色最新高清AV网站| 久章草在线毛片视频播放| 国产高清在线精品一区二区三区| 国产成人精品无码免费看| 国产高清在线男人的天堂| 国产AV巨作丝袜秘书| 久久精品第九区免费观看| av无码av无码专区| 国产成人免费永久在线平台| 亚洲春色在线视频| 综合色一色综合久久网| 蜜臀av性久久久久蜜臀aⅴ麻豆| 91亚洲国产成人久久精品| gogogo高清在线播放免费| 欧美高清一区三区在线专区 | 久久毛片少妇高潮| 一区二区不卡国产精品| 五月花成人网| 国产福利深夜在线播放| 精品亚洲女同一区二区| 黑人大战欲求不满人妻| 伊人久久久av老熟妇色| 亚洲精品香蕉一区二区| 欧美另类videossexo高潮| 国产乱码日产乱码精品精| 澳门永久av免费网站| 一个人在线观看免费中文www| 亚洲国产在一区二区三区| 67194熟妇在线观看线路| 国产成人精品一区二区三区|