成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不必糾結MVC還是MVP了,聽我說兩句~

移動開發 Android
MVC全稱是Model-View-Controller 也就是模型–視圖–控制器。是在1970年的時候提出由TrygveReenskaug在Smalltalk-80系統上首次提出的。MVP是MVC的一個演化版本,全稱是Model-View-Presenter。MVP的出現主要就是解決MVC中的View和Model的耦合性高的的問題,同時又帶來了很好的擴展性。

MVC全稱是Model-View-Controller 也就是模型–視圖–控制器,是在1970年的時候提出由TrygveReenskaug在Smalltalk-80系統上***提出的。

SmallTalk在百度百科的解釋是這樣:

Smalltalk被公認為歷史上第二個面向對象的程序設計語言和***個真正的集成開發環境 (IDE)。

來張圖說明一下MVC的工作模式吧!

MVC的工作模式 

圖中紅色小框框就是MVC的工作模式

  • 從圖中可以看出用戶向View發送指令,再有View直接要求Modle改變狀態。
  • 用戶也可以直接向Controller發送指令,再由Controller發送給Model,在通過Model去改變View的狀態。
  • 所以MVC框架模式View和Model之間的聯系還是相當緊密的,耦合度還是很高,后期維護改動View需要將Model中的內容也要改動。

MVC是一種框架模式而非設計模式

其優點是:

  • 理解起來比較容易,技術含量并不高,對開發和維護來說易于維護和修改
  • 耦合度不高,表現層與業務層分離,各司其職。

其缺點是:

  • 它定義不是很明確,完全理解MVC模式并不容易。
  • 使用MVC需要精心策劃,因為你它的內部原理比較復雜
  • 一些小的項目采用MVC框架反而會更加復雜

MVC的Android偽代碼實現

以下圖片中代碼與數據不匹配,只是為了方便理解MVC在代碼中如何寫,需要看實例的可以去網上了解,我在這里就偷懶了:)

  • 首先你需要一個View視圖,也就是XML布局。 

 

  • 然后你還需要一個Model

也就是數據,可以是數據庫中的內容,也可以是在代碼中寫的List集合。   

 

  • ***需要一個Controller,也就是Activity或者Fragment

通過在Controller中對用戶在View中傳遞過來的操作,進行訪問model中的數據,然后改變View中的狀態。  

 

MVP是MVC的一個演化版本,全稱是Model-View-Presenter。

MVP的出現主要就是解決MVC中的View和Model的耦合性高的的問題,同時又帶來了很好的擴展性。

MVP模式的三個角色的作用:

  • Presenter-中介

主演溝通View和Model的橋梁,他從Model獲取數據后返回給View層,是的View層和Model層之間沒有耦合,從而獎業務邏輯從View層抽離。

  • Model-房主

Model主要提供數據的存取功能,Presenter需要通過Model層存儲、獲取數據,Model層就像是一個倉庫。

  • View-用戶

View通常是指Activity、Fragment或者某個View控件。它含有一個Presenter成員變量,同時它需要實現一個邏輯接口,獎View上的操作轉交割Presenter進行實現,***Presenter調用View邏輯接口將結果返回給View元素。

來張圖說明一下MVP的工作模式吧 

  

從圖中我們可以看出MVP和MVC之間的額***區別:

  • VIew和Model之間徹底的解耦
  • MVP是面向接口編程,也就是說用戶不必知道我是具體如何實現額,用戶只要知道有這個功能,直接調用即可。

MVP的Android偽代碼實現

以下圖片中代碼與數據不匹配,只是為了方便理解MVC在代碼中如何寫,需要看實例的可以去網上了解,我在這里就偷懶了:)

  • 首先需要一個Presenter,作為View和Model的中間人   

 

  • 然后你還需要一個View以及ViewImpl接口   

    

 

  • ***你還需要Model一個ModelImpl接口   

 

為什么說不必糾結是MVC還是MVP呢?

MVC和MVP的最終目的就是要數據和UI分離,互相不影響。那么如何能不必糾結而做到呢??你聽說過面向對象嗎?聽過再聽聽我的理解~

  • 面向對象

封裝、多態,繼承。老師好像也都是這么教的,那么到底說明是多態封裝繼承呢?

  • 封裝

封裝就是將用戶不想看到的東西封裝起來,可以用到面向對象中的 Private。

屬性,將用戶不想看到的內容寫在這里面。比如收音機上的播放功能,用戶不用知道收音機如何播放,它只需要知道摁下這個鍵能播放即可。

  • 多態

多態就是一個對象的多種表現形態,主要表現為:行為多態和狀態多態。

行為多態就好比一個父親有多個孩子,每個孩子都不一樣,但是都是同一個父親;狀態多態就好比每個孩子在一天中有好多個狀態變現,有吃飯,學習,睡覺。

  • 繼承?不!我想說的是對象!

我的一個朋友告訴我繼承其實是對面向對象的***誤解。繼承我們可以理解成一個對象他有多個小對象組成;比如人這個對象是由手腳,腦袋…等其它小對象組成。因此繼承我們可以不去記住,我們只要對每個對象有深刻的認識即可把對象描述清楚!

那么MVC、MVP與面向對象有什么關系呢??

首先MVC和MVP都是要求數據和UI之間互不影響,那么面向對象不就是嗎!?

  • 面向對象View?

對象也就是我們說的用戶也就是MC或者MVP中View,用戶需要什么我們就展示給其什么,不需要的我們將其封裝起來提供一個方法給你調用即可,這是不是和MVC或者MVP中很像!

  • 面向對象Model?

同時面向對象也是需要將對象的行為細分,比如人可以跑,可以游泳…這是不是和MVC中的Model一樣,需要處理用戶不同的操作。

  • 面向對象Controller?

***面向對象也是需要一個狀態去控制的,比如人的大腦。通過大腦去協調手和腳的平衡。 

責任編輯:龐桂玉 來源: 安卓巴士Android開發者門戶
相關推薦

2018-09-19 12:04:00

車聯網無人駕駛語言交互

2018-09-25 16:07:53

大數據語言分布式

2017-04-01 08:30:00

MVCMVPMVVM

2017-03-31 20:45:41

MVCMVPMVVM

2023-09-04 12:58:35

數據模型

2025-03-03 09:50:00

2023-11-06 08:31:58

業務代碼多線程

2023-01-01 13:47:28

自動駕駛

2021-10-03 15:22:20

SSD固態硬盤HDD機械硬盤故障率

2012-06-28 13:37:14

2023-11-11 12:46:09

2018-03-21 16:19:40

MVCMVPMVVM

2019-02-22 14:25:07

PythonJava編程語言

2009-04-30 15:56:50

三層架構MVCMVP

2021-03-08 08:16:30

負載均衡系統流量

2015-08-04 10:44:09

2012-05-09 10:09:18

JavaMEJava

2023-01-06 11:27:43

ChatGPT人類GPT-3

2022-12-15 21:59:56

AIVR場景

2012-11-21 09:20:56

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美中文字幕一区二区三区亚洲 | 欧美久久久网站 | 欧美成人精品激情在线观看 | 夜夜精品浪潮av一区二区三区 | 国产精品美女www爽爽爽视频 | 狠狠狠色丁香婷婷综合久久五月 | 中文精品视频 | 成人激情视频在线播放 | 国产成人精品久久久 | 在线国产视频观看 | 99re6在线 | 亚洲久久 | 久久香蕉网| 一级美国黄色片 | 成人免费视频 | 久久成人人人人精品欧 | 欧美精品一区二区蜜桃 | 国产精品一二三区在线观看 | 久久久精品久久久 | 久久久久国产一区二区三区 | 成人午夜av| 久久综合一区 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 欧美99| 黄视频欧美 | 国产黄色网 | 免费高清av | 午夜精品一区二区三区在线观看 | 国产精品免费大片 | 伊人青青久久 | 日韩成人高清 | 免费在线观看黄网站 | 亚洲国产一区二区三区在线观看 | 精品欧美色视频网站在线观看 | 精品国产一区二区国模嫣然 | 91.色 | 91精品国产色综合久久不卡蜜臀 | 日本高清中文字幕 | 日韩中字幕 | 亚洲国产精品久久久久久 | 在线观看国产视频 |