<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## MVC+MVP+MVVM 項目實例 ## MVC MVC全名 Model View Controller 模型(model)-視圖(view)-控制器(controller) 一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。 - M是指業務模型,處理數據,業務邏輯; - Model 層就是 **JavaBean 實體類**,用于保存實例數據 - 與View無關,而與業務相關,對數據庫的操作、網絡的操作都應該在Model里面處理,當然對業務計算機等操作也是必須放在該層的。就是應用程序中二進制的數據。 - V是指用戶界面 - View 層其實就是程序的 UI 界面,用于向用戶展示數據以及接收用戶的輸入 - Android中,View一般采用XML文件進行界面的描述, - C則是控制器 - Controller 控制器用于更新 UI 界面和數據實例 - Android中Controller重任通常由Activity和Fragment擔當,暗含了不要在Activity中寫代碼,要通過Activity交割Model業務邏輯層處理,另一原因是Android中Activity響應時間是5s,如果耗時操作放在這里,程序很容易被回收掉 ![](https://i.imgur.com/Nkz4f2X.png) - 缺點:Activity既是View又是controller,沒有實現VC的分離、 ## MVP - MVP模式的核心思想 把Activity中的UI邏輯抽象成View接口,把業務邏輯抽象成Presenter接口,Model類還是原來的Model類 ![](http://i.imgur.com/9MZN0Jy.png) - View:負責繪制UI元素,與用戶進行交互(Android中體現為Activity) - Model:負責存儲、檢索、操作數據(有時也實現一個Model interface 用來降低耦合) - Presenter:作為View與Model交互的中間紐帶,處理與用戶交互的負責邏輯 - View interface:需要View實現的接口,View通過View Interface與Presenter進行交互,降低耦合,方便進行單元測試 - **優點**: - 降低耦合度,實現了Model和View真正的完全分離,可以修改View而不影響Model - 模塊職責換分明顯,層次清晰 - 隱藏數據(**Model里面如何操作,View不需要知道,View真正關心的是Model的處理結果**) - Presenter可以復用(比如:多個Activity使用同一個Presenter,ex:登錄注冊可以使用一個Presenter) - 利于測試驅動開發 - View 可以進行組件化 - 代碼靈活性 - Activity只處理生命周期的任務,代碼簡潔 - 視圖邏輯和業務邏輯抽象到了View和Presenter中,提高閱讀性 - Presenter被抽象成接口,可以有多種具體的實現 - 業務邏輯在Presenter中,避免后臺線程引用Activity導致內存泄漏,但是有時候如果Presenter持有view的引用,可是view關閉,也有可能造成Activity的內存泄漏 - **缺點** - Presenter除了對應的應用邏輯之外,還有大量的View-->Model,Model-->View的手動同步邏輯,造成Presenter比較笨重,維護起來會比較困難 - 由于視圖的渲染放在了Presenter中,所以視圖和Presenter的交互會過于頻繁 - 如果Presenter過多地渲染了視圖,往往會使得它與特定的視圖的聯系過于緊密。一旦視圖需要更改,則Presenter也需要更改。 - 額外的代碼復雜度及學習成本 MVP設計原則(常用的) - 一個Activity對應一個View - 通常情況下,一個View對應一個Presenter,在業務復雜時,一個Activity可對應多個Presenter - 將View與Presenter抽象成接口 ### MVC和MVP對比 ### ![](https://box.kancloud.cn/c98b9d7a024884e0f7d95ed50ac90190_824x637.jpg) ### MVP與MVC對比總結 ### - MVC允許View和Model直接通訊 - MVP中,所有對Model的交互都由Presenter內部來完成 - MVP中,View通常會抽象化出來系列的接口(面向接口編程) - MVP相對MVC而言,大大降低了耦合度(Activity不再進行復雜的操作),層級更明顯,更現實單元測試 - MVP的缺點:類文件會越來越來多,會“大爆炸”,有一定的學習成本。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看